如何在不知道类型的情况下使用类的方法?

时间:2013-05-26 11:28:53

标签: java class components jtextfield gettext

我遇到以下问题:我有一个名为activeCenter的JPanel,我在使用我的程序时会不时保存不同的JPanel。在那些JPanels中有一堆JTextfields,JLabel和一个JButton。 现在我想得到所有Textfields的文本(数量已知)。我现在的问题是:我使用for循环遍历JPanel中的所有组件并检查它是否是JTextfield。这里的问题是,如果是JTextField,我如何使用方法getText()?我只有Component,不知道如何使用JTextField中的Methods。有没有办法解决这个问题,而无需将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
      }
    }
  }
});

3 个答案:

答案 0 :(得分:4)

您需要像这样投射c对象:

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

另请注意,您可以对instanceof条件使用if关键字。

答案 1 :(得分:1)

如果我是你,我会重新设计:创建一个包装JPanel的类并使其实现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()

答案 2 :(得分:0)

您可以将其强制转换为JTextField:

((JTextField) c).getText();