繁体   English   中英

检索JTextField文本值

[英]Retrieve JTextField text value

我正在尝试从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),但是它们是Components,所以这就是我要强制转换为JTextField的原因。

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

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

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

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

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

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

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

(因为x[i]JTextComponent的实例,但这并不意味着它必然是JTextField 。)但是JTextComponent具有.getText()因此可以将其转换为JTextComponent

通过反射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
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM