代码之家  ›  专栏  ›  技术社区  ›  sylar12

JTextField的数组。面板中的对齐

  •  2
  • sylar12  · 技术社区  · 7 年前

    model

    你好我正试图定位一个JTextField数组,就像图中所示。我之所以选择创建数组,是因为我希望有尽可能多的字段。

    现在,我遇到的问题是,当我在面板中放置JTextFields时,它会垂直放置它们。

    是否也可以在可滚动面板中插入文本字段?

    private int nrFields=4;
        private JTextField[] fields = new JTextField[nrFields];
        private JPanel panelNew = new JPanel();
    
        private void create() { 
    
            for (JTextField auxField: fields) {
                panelNew.add(auxField=new JTextField(30));
            }   
    
            JFrame frame = new JFrame("Frame");     
            frame.getContentPane().add(this.panelNew);      
            frame.setSize(800, 800);
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        }
    

    编辑:

    我设法解决了这个问题,将文本字段放在一个面板中,在面板上我将布局设置为boxlayout。接下来,我将此面板放置在可滚动窗格中,并将此窗格放置在新面板中。

    private int nrFields=10;
        private JTextField[] fields = new JTextField[nrFields];
        private JPanel panelNew = new JPanel();
        private JScrollPane newScroll = new JScrollPane();      
        private JPanel panelMain = new JPanel();
    
        private void create() { 
            newScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    
            panelMain.setLayout(new BoxLayout(panelMain,BoxLayout.Y_AXIS));
            for (int i=0;i<nrFields;i++) {
                panelMain.add(fields[i]=new JTextField(30));            
            }   
    
            newScroll.setViewportView(panelMain);
            panelNew.add(newScroll);
            JFrame frame = new JFrame("Frame");     
            frame.getContentPane().add(this.panelNew);      
            frame.setSize(800, 800);
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        }
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Andrew Thompson    7 年前

    我(基本上)是这样做的。

    enter image description here

    import java.awt.*;
    import javax.swing.*;
    import javax.swing.border.EmptyBorder;
    import java.util.Random;
    
    public class VerticalTextFields {
    
        private JComponent ui = null;
    
        VerticalTextFields() {
            initUI();
        }
    
        public void initUI() {
            if (ui!=null) return;
    
            ui = new JPanel(new BorderLayout(4,4));
            ui.setBorder(new EmptyBorder(4,20,4,20));
    
            Random r = new Random();
            int n = 10 + r.nextInt(10);
            JPanel textFieldContainer = new JPanel(new GridLayout(0, 1, 5, 5));
            /*
            While I do not see the point of this array, you may have 
            some purpose for it that is not immediately obvious, so..
            */
            JTextField[] textFieldArray = new JTextField[n];
            for (int ii=0; ii<n; ii++) {
                textFieldArray[ii] = new JTextField("Text field " + (ii+1), 40);
                textFieldContainer.add(textFieldArray[ii]);
            }
            JScrollPane textFieldScrollPane = new JScrollPane(textFieldContainer);
            Dimension d = textFieldContainer.getPreferredSize();
            textFieldScrollPane.getViewport().setPreferredSize(
                    new Dimension(d.width, 200));
            ui.add(textFieldScrollPane, BorderLayout.CENTER);
            JPanel textAreaContainer = new JPanel(new FlowLayout());
            textAreaContainer.setBorder(new EmptyBorder(10, 50, 10, 50));
            textAreaContainer.add(new JScrollPane(new JTextArea("Text area", 3, 20)));
            ui.add(textAreaContainer, BorderLayout.PAGE_START);
    
            JPanel buttonContainer = new JPanel(new BorderLayout());
            buttonContainer.setBorder(new EmptyBorder(10, 10, 10, 10));
            ui.add(buttonContainer, BorderLayout.PAGE_END);
            buttonContainer.add(new JButton("Line Start"), BorderLayout.LINE_START);
            buttonContainer.add(new JButton("Line End"), BorderLayout.LINE_END);
        }
    
        public JComponent getUI() {
            return ui;
        }
    
        public static void main(String[] args) {
            Runnable r = new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (Exception useDefault) {
                    }
                    VerticalTextFields o = new VerticalTextFields();
    
                    JFrame f = new JFrame(o.getClass().getSimpleName());
                    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                    f.setLocationByPlatform(true);
    
                    f.setContentPane(o.getUI());
                    f.pack();
                    f.setMinimumSize(f.getSize());
    
                    f.setVisible(true);
                }
            };
            SwingUtilities.invokeLater(r);
        }
    }
    
        2
  •  1
  •   J. Lorenzo    7 年前

    您必须使用JScrollPane。然后调用setViewportview(组件)。然后只需在其中放置JTextField。如果你可以发布一些代码,也许我可以提供更多帮助。 希望有帮助。