【问题标题】:Creating dynamically component by variable value - Java通过变量值动态创建组件 - Java
【发布时间】:2014-01-04 03:26:58
【问题描述】:

我有一个 gui,我可以在其中输入值(JTextField - 声明了新组件的值),当我点击 JButton 时,我将看到新组件(JTextField)。

我试试:

JButton button = new JButton("Do it");
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        for(int i=0;i<Integer.parseInt(textField.getText());i++){       
        add(new JTextField());
            validate();
            repaint();
        }
    }
});

我应该如何编写获取新组件的代码?

我的方法:

public static void newComp(String value)
    {
        for(int i=0;i<Integer.parseInt(value);i++)
        {       
            contentPane.add(new JTextField());
            contentPane.revalidate();
            contentPane.repaint();
    }

【问题讨论】:

  • 在您的 GUI/JFrame 中创建一个“public static void”方法,该方法将您使用的字符串 (textField.getText()) 作为参数。然后在该方法中创建您的 for 循环和文本字段。请记住,此方法将是静态的,因此您不能在方法之外使用参数,除非您将其作为参数提供。在添加它们之前定位和自定义文本字段可能是一个好主意。否则他们都将在彼此之上。而不是 alidate(); (我确定这是一个错字),试试 revalidate();
  • 另一个想法可能是,如果您有最大数量的可用文本字段,则在开始时创建它们,然后 setVisible(false);在他们。然后,您可以在需要时让它们可见。
  • 我创建了方法,看看我的第一篇文章,我做错了什么?未创建组件时如何设置位置文本字段?
  • 不要做 contentPane.add(new JTextField()),只需在你的 for 循环中创建一个新变量,比如 JTextField temp = new JTextField();并在 temp 上设置位置,然后将其添加到内容窗格中。如果您希望它们在彼此下方生成,请执行类似 temp.setPosition(someStartPositionX, someStartPositionY + (i*20));

标签: java user-interface dynamic components jtextfield


【解决方案1】:

我认为创建一个 ArrayList 并向其中添加新组件会更好。然后创建一个方法 initComponents(),在其中初始化其中的所有组件,包括来自 ArrayList 的新组件。然后创建另一个方法,如下所示:

void refresh() {
    contentPane.removeAll();
    button.clear();
    textField.clear();
    initComponents();
    contentPane.revalidate();
    contentPane.repaint();
}

这样您可以从面板中删除所有内容,然后动态添加新组件。并且不要忘记重新添加监听器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-27
    • 2021-12-19
    • 1970-01-01
    • 2017-08-01
    • 2013-06-04
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多