2010-10-07 83 views
0

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

英里代码是这样的

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”(的JLabel和JTextField中),但他们是组件,而这就是为什么我做演员到JTextField中。

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

回答

1

((JTextComponent) x[i]).getText();应该工作。

(仅仅因为x[i]JTextComponent的一个实例,并不意味着它是一个neccesarily虽然JTextField。)但是JTextComponent具有.getText()所以铸造JTextComponent应该没问题。

2

我认为你需要重新考虑你的设计。为什么不在包含您的JTextField的类中公开getText()方法。该方法可以删除到您的JTextFieldgetText()方法,并避免那个上帝糟糕的instanceof

3

我真的迷失在这里,我不知道 如果这是正确的做法。 感谢您的时间!

你永远不会被迫在一行写你所有的代码。所以为了简化你的问题简化代码。例如:

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

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

+1

+1百万分给我最喜欢的建议给新程序员。不要试图在一条线上做所有事情。有时候只是写出棘手序列的步骤可以帮助我在令人讨厌的编译/调试螺旋之前捕获错误。 – 2010-10-07 21:05:48

+0

这是一个很好的建议,谢谢! – 2010-10-07 21:57:30

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 
    }