我遇到以下问题:我有一个名为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
}
}
}
});
答案 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();