0

我正在尝试从 JTextField 检索文本值,但首先我需要将组件对象 (java.awt.Component) 转换为 JTextFiel ...

mi代码是这样的

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。

我真的迷路了,我不知道这是否是正确的方法。谢谢你的时间!

4

4 回答 4

4

我真的迷路了,我不知道这是否是正确的方法。谢谢你的时间!

您永远不会被迫在一行上编写所有代码。因此,为了简化您的问题,请简化代码。就像是:

Component component = x[i];
JTextField textField = (JTextField)component;
String text = textField.getText();

这样,如果您有编译错误或编译器将指出确切的行。

于 2010-10-07T20:48:36.820 回答
2

我认为你需要重新考虑你的设计。为什么不在getText()包含您的JTextField. 那个方法可以删掉你JTextFieldgetText()方法,避免那个天啊instanceof

于 2010-10-07T20:30:00.663 回答
1

((JTextComponent) x[i]).getText();应该管用。

(仅仅因为x[i]是 a 的一个实例JTextComponent,并不意味着它一定是 a JTextField。)但是JTextComponent有一个.getText()so 转换JTextComponent应该是可以的。

于 2010-10-07T20:27:32.087 回答
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
  }
于 2012-11-16T11:48:10.993 回答