0

我有以下问题:我有一个名为 activeCenter 的 JPanel,我在使用我的程序时不时在其中保存不同的 JPanel。在这些 JPanel 中有一堆 JTextfields、JLabels 和一个 JButton。现在我想获取所有文本字段的文本(数量是已知的)。我现在的问题是:我使用 for 循环遍历 JPanel 中的所有组件并检查它是否为 JTextfield。这里的问题是,如果是 JTextField,我该如何使用 Method getText()?我只有组件,不知道如何使用 JTextField 中的方法。有没有办法解决这个问题而不必将 JTextFields 保存在数组中?以下是相关代码:

button.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    for(Component c: activeCenter.getComponents())
    {
      if(c.getClass() == JTextField.class)
      {
        //use the Method getText() on c
      }
    }
  }
});
4

3 回答 3

4

你需要c像这样转换你的对象:

String text = null;
if (c instanceof JTextField) {
    text = ((JTextField)c).getText();
}

另请注意,您可以将instanceof关键字用于您的if条件。

于 2013-05-26T11:30:55.623 回答
1

如果我是你,我会重新设计:创建一个包装 aJPanel并使其实现的类Iterable<JTextField>。创建两种.addComponent()方法:一种是JTextField专门添加一个,另一种是添加一个Component。将JTextField元素存储在List.

那么实现Iterable<JTextField>就很简单了:

@Override
public Iterator<JTextField> iterator()
{
    return textFields.iterator();
}

您可以使用 foreach 循环:

for (final JTextField textField: activeCenter)
    // use textField.getText()
于 2013-05-26T11:36:06.860 回答
0

您可以将其转换为 JTextField:

((JTextField) c).getText();

于 2013-05-26T11:31:03.560 回答