检索JTextField文本值

时间:2010-10-07 20:21:54

标签: java swing jtextfield

我正在尝试从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。

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

4 个答案:

答案 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
  }