Java get JPanel Components

2022-09-02 20:31:32

我有一个充满JTextFields的JPanel...

for (int i=0; i<maxPoints; i++) {
    JTextField textField = new JTextField();
    points.add(textField);
}

我以后如何在该JPanel中获取JTextFields?就像如果我想要他们的价值观

TextField.getText();

谢谢


答案 1

Java中的每个JPanel也是一个AWT容器。因此,您应该能够使用 getComponents 获取面板中包含的组件数组,循环访问它们,检查它们的类型(以确保您没有获得其他控件),并对它们执行任何需要执行的操作。

但是,这通常是糟糕的设计。如果您知道需要访问特定组件,则最好维护这些文本字段的数组并将其传递,即使它们在视觉上包含在容器中。

如果这是一个循环任务,或者可以从多个点完成,那么甚至可能有一个特殊类来表示带有文本字段的面板,然后该类将通过其接口提供访问这些字段的方法。


答案 2

好吧,请记住,他们自己并没有到达那里(我认为阅读一些关于在运行时动态创建这些面板的问题)

在那里发布的答案中,有人说你应该在数组中保留对这些文本字段的引用。这正是您在这里需要的:

List<JTextField> list = new ArrayLists<JTextField>();

// your code...
for (int i=0; i<maxPoints; i++) { 
    JTextField textField = new JTextField();
    points.add(textField);
    list.add( textField ); // keep a reference to those fields.
}

for( JTextField f : list ) { 
   System.out.println( f.getText() ) ;
}

这难道不容易吗?

只要记住要保持这些类型的工件(列表)尽可能私密。它们仅用于您的控制,我不认为它们属于界面。

假设您要获取文本数组,而不是

 public List<JTextField> getFields();

您应该考虑:

 public List<String> getTexts(); // get them from the textfields ... 

推荐