【问题标题】:Java Swing: JButton creates new JTextField(s)Java Swing:JButton 创建新的 JTextField(s)
【发布时间】:2012-06-16 07:56:57
【问题描述】:

您好 :) 我是 Java Swing 的初学者,我无法通过 Google 搜索解决我的问题。我有一个 JPanel,想在按下 JButton 后动态添加 JTextField。以后如何从他们那里获取文本()?我的代码,注释部分无法正常工作。

变量“计数器”计算面板中有多少个字段。

public class AppPanel extends JPanel {

    private JTextField tfData[];
    private JButton btAdd;
    private int counter = 1;

    public AppPanel() {
            setLayout(null);

            //tfData[counter] = new JTextField();
            //tfData[counter-1].setBounds(20, 20, 250, 20);
            //add(tfData[counter-1]);

            btAdd = new JButton("Add field");
            btAdd.setBounds(280, 20, 120, 20);
            btAdd.addActionListener(new alAdd());
            add(btAdd); 
    }

    class alAdd implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                    //tfData[counter] = new JTextField();
                    //tfData[counter].setBounds(20, 20+20*counter, 250, 20);
                    //add(tfData[counter]);
                    ++counter;
            }
    }
}

【问题讨论】:

标签: java swing jpanel jbutton jtextfield


【解决方案1】:

由于您已经存储了对文本字段的引用,因此只需使用此数组来查询文本字段的文本:

tfData[counter-1].getText();

将显示最后添加的文本字段的文本。

但是您确实应该在之前初始化您的数组,否则您将无法向其中添加任何项目。我认为这是您注释掉添加代码时的主要问题。

// think about how many text fields you will need (here: 16)
private JTextField tfData[] = new tfData[16];

如果您使用数组,请注意不要超出其界限。但是更好的use a list 就像之前在 cmets 中提出的那样,因为它会动态增长,您不必处理数组边界,甚至可以跳过计数(该列表也可以为您做到这一点)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    相关资源
    最近更新 更多