Java 获取 JPanel 组件

新手上路,请多包涵

我有一个充满 JTextFields 的 JPanel …

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

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

TextField.getText();

谢谢

原文由 Devoted 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 919
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 ...

原文由 OscarRyz 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

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

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

原文由 Uri 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题