【问题标题】:I want to add a JLabel and Text box dynamically by clicking add button我想通过单击添加按钮动态添加 JLabel 和文本框
【发布时间】:2011-02-23 22:27:28
【问题描述】:

当我动态创建文本和标签框时,它应该采用“文本框:标签框”的格式,然后当我再次单击添加按钮时,相同的模式应该在下一行重复,依此类推...我应该采用哪种布局怎么用?

这是我使用的代码

if(field_name.getText().equals("")){  
            error.setForeground(Color.red);    
            error.setText("Enter the Field name first");
        } else {  
        JLabel l = new JLabel(field_name.getText(), JLabel.RIGHT);   
        JTextField textField = new JTextField();  
        Dimension dim = new Dimension(20,30);  
        textField.setPreferredSize(dim);  
        field_layer.add(l);  
        field_layer.add(textField);  
        SpringUtilities.makeCompactGrid(field_layer,  
                                numPairs, 2, //rows, cols  
                                6, 6,        //initX, initY  
                                6, 6);       //xPad, yPad  
        numPairs++;  
        field_layer.invalidate();  
        this.pack();  
        }  

【问题讨论】:

  • 我为您准备了一个可行的解决方案,但我绝对建议您在空闲时间阅读布局管理器。

标签: java swing layout


【解决方案1】:

一个选项是GridBagLayout。为了正确使用此布局,您需要了解GridBagConstraints。这是一个tutorial,可帮助您入门。

这是一个简单的例子:

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;

public class MyExample 
{
    // Field members
    static JPanel panel = new JPanel();
    static Integer indexer = 1;
    static List<JLabel> listOfLabels = new ArrayList<JLabel>();
    static List<JTextField> listOfTextFields = new ArrayList<JTextField>();

    public static void main(String[] args)
    {       
        // Construct frame
        JFrame frame = new JFrame();
        frame.setLayout(new GridBagLayout());
        frame.setPreferredSize(new Dimension(300, 300));
        frame.setTitle("My Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Frame constraints
        GridBagConstraints frameConstraints = new GridBagConstraints();

        // Construct button
        JButton addButton = new JButton("Add");
        addButton.addActionListener(new ButtonListener());

        // Add button to frame
        frameConstraints.gridx = 0;
        frameConstraints.gridy = 0;
        frame.add(addButton, frameConstraints);

        // Construct panel
        panel.setPreferredSize(new Dimension(200, 200));
        panel.setLayout(new GridBagLayout());
        panel.setBorder(LineBorder.createBlackLineBorder());

        // Add panel to frame
        frameConstraints.gridx = 0;
        frameConstraints.gridy = 1;
        frameConstraints.weighty = 1;
        frame.add(panel, frameConstraints);

        // Pack frame
        frame.pack();

        // Make frame visible
        frame.setVisible(true);
    }

    static class ButtonListener implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent arg0) 
        {       
            // Clear panel
            panel.removeAll();

            // Create label and text field
            listOfTextFields.add(new JTextField());
            listOfLabels.add(new JLabel("Label " + indexer));

            // Create constraints
            GridBagConstraints textFieldConstraints = new GridBagConstraints();
            GridBagConstraints labelConstraints = new GridBagConstraints();

            // Add labels and text fields
            for(int i = 0; i < indexer; i++)
            {
                // Text field constraints
                textFieldConstraints.gridx = 0;
                textFieldConstraints.gridy = i;

                // Label constraints
                labelConstraints.gridx = 1;
                labelConstraints.gridy = i;

                // Add them to panel
                panel.add(listOfTextFields.get(i), textFieldConstraints);
                panel.add(listOfLabels.get(i), labelConstraints);
            }

            // Align components top-to-bottom
            GridBagConstraints c = new GridBagConstraints();
            c.gridx = 0;
            c.gridy = indexer;
            c.weighty = 1;
            panel.add(new JLabel(), c);

            // Increment indexer
            indexer++;
        }
    }
}

注意:不要将自己局限于这个特定的布局管理器。也就是说,你也应该探索其他Layout Managers

【讨论】:

  • 这很好解释我必须把它放在循环中,看看它是如何工作的..我会在尝试后回复..
  • @Deepak:请注意,我只是将 setPreferredSize 用于可视化目的,也就是说,尺寸完全是任意的。
  • 当我必须一次添加一对并且在下一个“添加”按钮上单击我应该在 tat 下方再添加一对时,请告诉我。那么我应该如何更改代码?
  • 现在它的工作,但该过程从我不想发生的屏幕输入开始。我想从屏幕顶部开始向下移动。那我应该改变什么..
  • @Deepak:再次更新,但我不确定这个有效的“解决方案”有多可靠..
【解决方案2】:

我对上面的代码做了些微改动.....

    import java.awt.Dimension;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.border.LineBorder;

    public class MyExample 
    {
        // Field members
        static JPanel panel = new JPanel();
        static Integer indexer = 1;
        static List<JLabel> listOfLabels = new ArrayList<JLabel>();
        static List<JTextField> listOfTextFields = new ArrayList<JTextField>();

        public static void main(String[] args)
        {       
            // Construct frame
            JFrame frame = new JFrame();
            frame.setLayout(new GridBagLayout());
            frame.setPreferredSize(new Dimension(990, 990));
            frame.setTitle("My Example");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            // Frame constraints
            GridBagConstraints frameConstraints = new GridBagConstraints();

            // Construct button
            JButton addButton = new JButton("Add");
            addButton.addActionListener(new ButtonListener());

            // Add button to frame
            frameConstraints.gridx = 0;
            frameConstraints.gridy = 0;
            frame.add(addButton, frameConstraints);

            // Construct panel
            panel.setPreferredSize(new Dimension(600, 600));
            panel.setLayout(new GridBagLayout());
            panel.setBorder(LineBorder.createBlackLineBorder());

            // Add panel to frame
            frameConstraints.gridx = 0;
            frameConstraints.gridy = 1;
            frameConstraints.weighty = 1;
            frame.add(panel, frameConstraints);

            // Pack frame
            frame.pack();

            // Make frame visible
            frame.setVisible(true);
        }

        static class ButtonListener implements ActionListener
        {
            @Override
            public void actionPerformed(ActionEvent arg0) 
            {       
                // Clear panel
                panel.removeAll();

                // Create label and text field
                JTextField jTextField = new JTextField();
                jTextField.setSize(100, 200);
                listOfTextFields.add(jTextField);
                listOfLabels.add(new JLabel("Label " + indexer));

                // Create constraints
                GridBagConstraints textFieldConstraints = new GridBagConstraints();
                GridBagConstraints labelConstraints = new GridBagConstraints();

                // Add labels and text fields
                for(int i = 0; i < indexer; i++)
                {
                    // Text field constraints
                    textFieldConstraints.gridx = 1;
                    textFieldConstraints.fill = GridBagConstraints.HORIZONTAL;
                    textFieldConstraints.weightx = 0.5;
                    textFieldConstraints.insets = new Insets(10, 10, 10, 10);
                    textFieldConstraints.gridy = i;

                    // Label constraints
                    labelConstraints.gridx = 0;
                    labelConstraints.gridy = i;
                    labelConstraints.insets = new Insets(10, 10, 10, 10);

                    // Add them to panel
                    panel.add(listOfLabels.get(i), labelConstraints);
                    panel.add(listOfTextFields.get(i), textFieldConstraints);
                }

                // Align components top-to-bottom
                GridBagConstraints c = new GridBagConstraints();
                c.gridx = 0;
                c.gridy = indexer;
                c.weighty = 1;
                panel.add(new JLabel(), c);

                // Increment indexer
                indexer++;
                panel.updateUI();
            }
        }
    }

【讨论】:

    【解决方案3】:

    我会推荐一个 GridBagLayout。您可以使用:

    JPanel pan = new JPanel(); // For Swing
    //or Panel pan = new Panel(); for AWT
    pan.setLayout(new GridBagLayout());
    GridBagConstraints textC = new GridBagConstraints();
    textC.gridx = 0;
    GridBagConstraints labelC= new GridBagConstraints();
    labelC.gridx = 1;
    // For Every (J)TextField
    pan.add(text,textC);
    // For Every (J)Label
    label.add(label,labelC);
    

    【讨论】:

    • 您给我的代码将文本和标签放在中心,并在我添加更多内容时添加到右侧。看看我的代码。它把一个放在另一个下面,但它正在伸展和填充面板..
    • 对不起,我忘了设置网格。
    【解决方案4】:

    我修改了一些代码和

    看到这个 打包表单生成器;

                    import java.awt.Dimension;
                    import java.awt.GridBagConstraints;
                    import java.awt.GridBagLayout;
                    import java.awt.Insets;
                    import java.awt.event.ActionEvent;
                    import java.awt.event.ActionListener;
                    import java.util.ArrayList;
                    import java.util.List;
                    import javax.swing.JButton;
                    import javax.swing.JFrame;
                    import javax.swing.JLabel;
                    import javax.swing.JPanel;
                    import javax.swing.JTextField;
                    import javax.swing.border.LineBorder;
    
                    public class CreateFormFields {
                        // Field members
    
                        static JPanel panel = new JPanel();
                        static Integer indexer = 1;
                        static List<JLabel> listOfLabels = new ArrayList<JLabel>();
                        static List<JTextField> listOfTextFields = new ArrayList<JTextField>();
                        static List<JTextField> listDataType = new ArrayList<JTextField>();
                        static List<JTextField> listRange = new ArrayList<JTextField>();
                        static List<JTextField> listLable = new ArrayList<JTextField>();
    
                        public static void main(String[] args) {
                            // Construct frame
                            JFrame frame = new JFrame();
                            frame.setLayout(new GridBagLayout());
                            frame.setPreferredSize(new Dimension(990, 990));
                            frame.setTitle("Form Creator");
                            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
                            // Frame constraints
                            GridBagConstraints frameConstraints = new GridBagConstraints();
    
                            // Construct button
                            JButton addButton = new JButton("Add");
                             JButton createButton = new JButton("Create Form");
                            addButton.addActionListener(new ButtonListener());
                     createButton.addActionListener(new CreateForm());
                            // Add button to frame
                            frameConstraints.gridx = 0;
                            frameConstraints.gridy = 0;
                            frame.add(addButton, frameConstraints);
                             frameConstraints.gridx = 0;
                            frameConstraints.gridy = 1;
                             frame.add(createButton, frameConstraints);
    
                            // Construct panel
                            panel.setPreferredSize(new Dimension(900, 900));
                            panel.setLayout(new GridBagLayout());
                            panel.setBorder(LineBorder.createBlackLineBorder());
    
                            // Add panel to frame
                            frameConstraints.gridx = 0;
                            frameConstraints.gridy = 2;
                            frameConstraints.weighty = 1;
                            frame.add(panel, frameConstraints);
    
                            // Pack frame
                            frame.pack();
    
                            // Make frame visible
                            frame.setVisible(true);
                        }
    
                        static class ButtonListener implements ActionListener {
    
                            @Override
                            public void actionPerformed(ActionEvent arg0) {
                                // Clear panel
                                panel.removeAll();
    
                                // Create label and text field
                                JTextField jTextField = new JTextField();
                                jTextField.setSize(5, 20);
    
                                JTextField jTextField2 = new JTextField();
                                jTextField2.setSize(6, 20);
    
                                JTextField jTextField3 = new JTextField();
                                jTextField3.setSize(7, 20);
    
                                JTextField jTextField4 = new JTextField();
                                jTextField4.setSize(8, 20);
    
                                listOfTextFields.add(jTextField);
                                listDataType.add(jTextField2);
                                listRange.add(jTextField3);
                                listLable.add(jTextField4);
                                listOfLabels.add(new JLabel("LableName | FieldName | DataType | Range "));
    
                                // Create constraints
                                GridBagConstraints textFieldConstraints = new GridBagConstraints();
                                GridBagConstraints labelConstraints = new GridBagConstraints();
                                GridBagConstraints gridlistDataType = new GridBagConstraints();
                                GridBagConstraints gridlistRange = new GridBagConstraints();
                                GridBagConstraints gridlistLable = new GridBagConstraints();
    
                                // Add labels and text fields
                                for (int i = 0; i < indexer; i++) {
                                    // Label constraints
                                    labelConstraints.gridx = 0;
                                    labelConstraints.gridy = i;
                                    labelConstraints.insets = new Insets(10, 10, 10, 10);
    
                                    // Text field constraints
                                    textFieldConstraints.gridx = 1;
                                    textFieldConstraints.fill = 1;//GridBagConstraints.HORIZONTAL;
                                    textFieldConstraints.weightx = 0.5;
                                    textFieldConstraints.insets = new Insets(10, 10, 10, 10);
                                    textFieldConstraints.gridy = i;
    
    
                                    gridlistDataType.gridx = 2;
                                    gridlistDataType.fill = 1;//GridBagConstraints.HORIZONTAL;
                                    gridlistDataType.weightx = 0.5;
                                    gridlistDataType.insets = new Insets(10, 10, 10, 10);
                                    gridlistDataType.gridy = i;
    
    
                                    gridlistRange.gridx = 3;
                                    gridlistRange.fill = 1;//GridBagConstraints.HORIZONTAL;
                                    gridlistRange.weightx = 0.5;
                                    gridlistRange.insets = new Insets(10, 10, 10, 10);
                                    gridlistRange.gridy = i;
    
                                    gridlistLable.gridx = 4;
                                    gridlistLable.fill = 1;//GridBagConstraints.HORIZONTAL;
                                    gridlistLable.weightx = 0.5;
                                    gridlistLable.insets = new Insets(10, 10, 10, 10);
                                    gridlistLable.gridy = i;
    
    
    
    
    
                                    // Add them to panel
                                    panel.add(listOfLabels.get(i), labelConstraints);
                                    panel.add(listOfTextFields.get(i), textFieldConstraints);
                                    panel.add(listDataType.get(i), gridlistDataType);
                                    panel.add(listRange.get(i), gridlistRange);
                                    panel.add(listLable.get(i), gridlistLable);
    
    
    
                                }
    
                                // Align components top-to-bottom
                                GridBagConstraints c = new GridBagConstraints();
                                c.gridx = 0;
                                c.gridy = indexer;
                                c.weighty = 1;
                                panel.add(new JLabel(), c);
    
                                // Increment indexer
                                indexer++;
                                panel.updateUI();
                            }
                        }
    
    
    
    
                          static class CreateForm implements ActionListener {
    
                            @Override
                            public void actionPerformed(ActionEvent arg0) {
                                // Clear panel
                                panel.removeAll();
    
                                // Create label and text field
                                JTextField jTextField = new JTextField();
                                jTextField.setSize(5, 20);
    
                                JTextField jTextField2 = new JTextField();
                                jTextField2.setSize(6, 20);
    
                                JTextField jTextField3 = new JTextField();
                                jTextField3.setSize(7, 20);
    
                                JTextField jTextField4 = new JTextField();
                                jTextField4.setSize(8, 20);
    
                                listOfTextFields.add(jTextField);
                                listDataType.add(jTextField2);
                                listRange.add(jTextField3);
                                listLable.add(jTextField4);
                                listOfLabels.add(new JLabel("LableName | FieldName | DataType | Range "));
    
                                // Create constraints
                                GridBagConstraints textFieldConstraints = new GridBagConstraints();
                                GridBagConstraints labelConstraints = new GridBagConstraints();
                                GridBagConstraints gridlistDataType = new GridBagConstraints();
                                GridBagConstraints gridlistRange = new GridBagConstraints();
                                GridBagConstraints gridlistLable = new GridBagConstraints();
    
                                // Add labels and text fields
                                for (int i = 0; i < indexer; i++) {
                                    // Label constraints
                                    labelConstraints.gridx = 0;
                                    labelConstraints.gridy = i;
                                    labelConstraints.insets = new Insets(10, 10, 10, 10);
    
                                    // Text field constraints
                                    textFieldConstraints.gridx = 1;
                                    textFieldConstraints.fill = 1;//GridBagConstraints.HORIZONTAL;
                                    textFieldConstraints.weightx = 0.5;
                                    textFieldConstraints.insets = new Insets(10, 10, 10, 10);
                                    textFieldConstraints.gridy = i;
    
    
                                    gridlistDataType.gridx = 2;
                                    gridlistDataType.fill = 1;//GridBagConstraints.HORIZONTAL;
                                    gridlistDataType.weightx = 0.5;
                                    gridlistDataType.insets = new Insets(10, 10, 10, 10);
                                    gridlistDataType.gridy = i;
    
    
                                    gridlistRange.gridx = 3;
                                    gridlistRange.fill = 1;//GridBagConstraints.HORIZONTAL;
                                    gridlistRange.weightx = 0.5;
                                    gridlistRange.insets = new Insets(10, 10, 10, 10);
                                    gridlistRange.gridy = i;
    
                                    gridlistLable.gridx = 4;
                                    gridlistLable.fill = 1;//GridBagConstraints.HORIZONTAL;
                                    gridlistLable.weightx = 0.5;
                                    gridlistLable.insets = new Insets(10, 10, 10, 10);
                                    gridlistLable.gridy = i;
    
    
    
    
    
                                    // Add them to panel
                                    panel.add(listOfLabels.get(i), labelConstraints);
                                    panel.add(listOfTextFields.get(i), textFieldConstraints);
                                    panel.add(listDataType.get(i), gridlistDataType);
                                    panel.add(listRange.get(i), gridlistRange);
                                    panel.add(listLable.get(i), gridlistLable);
    
    
    
                                }
    
                                // Align components top-to-bottom
                                GridBagConstraints c = new GridBagConstraints();
                                c.gridx = 0;
                                c.gridy = indexer;
                                c.weighty = 1;
                                panel.add(new JLabel(), c);
    
                                // Increment indexer
                                indexer++;
                                panel.updateUI();
                            }
                        }
    
                    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      相关资源
      最近更新 更多