我正在尝试从JTextField中检索文本值,但首先我需要将一个组件对象(java.awt.Component)转换为JTextFiel ......
mi code就像这样
Component[] x = this.getComponents();
for(int i = 0; i < x.length; i++)
{
if (x[i] instanceof JTextComponent)
{
//retrieve text...something like
//(JTextField)x[i].getText();
}
}
我这样做是因为我知道mi页面的所有控件都在“x”(JLabels和JTextField)中,但它们是组件,这就是为什么我要将转换为JTextField。
我真的迷失在这里,我不知道这是否是正确的方法。 谢谢你的时间!
答案 0 :(得分:4)
我真的迷失在这里,我不知道 如果这是正确的方法。 谢谢你的时间!
您永远不会被迫在一行上编写所有代码。因此,为了简化您的问题,请简化代码。类似的东西:
Component component = x[i];
JTextField textField = (JTextField)component;
String text = textField.getText();
这样,如果你有编译错误或编译器会指出确切的行。
答案 1 :(得分:2)
我认为您需要重新考虑您的设计。为什么不在包含getText()
的类中公开JTextField
方法。该方法可以删除您的JTextField
getText()
方法,并避免上帝可怕的instanceof
。
答案 2 :(得分:1)
((JTextComponent) x[i]).getText();
应该有用。
(仅因为x[i]
是JTextComponent
的一个实例,并不意味着它必然是JTextField
。但JTextComponent
有一个.getText()
所以施放到JTextComponent
应该没问题。
答案 3 :(得分:0)
通过反射API。 只是为了扩大视野=)
import java.lang.reflect.Method;
...
for ( Component component : this.getComponents() ) {
try {
Method getText = component.getClass()
.getDeclaredMethod("getText");
String text = (String)getText.invoke();
//Do something with text
} catch ( Exception exc ) {} // no such method
}