Java,Swing,获取和更改所有输入字段

Posted

技术标签:

【中文标题】Java,Swing,获取和更改所有输入字段【英文标题】:Java, Swing, getting and changing all input fields 【发布时间】:2012-05-09 13:46:41 【问题描述】:

我正在编写一个选项面板,为了能够在开发应用程序时更快地添加更多选项,我决定将所有输入的组件放在一个框架中,我需要从配置中加载它们的值并设置相应的文本,但似乎无法从字段中获取组件的文本。 我得到一个: 线程“AWT-EventQueue-0”中的异常 java.lang.RuntimeException:无法编译的源代码 - 错误的 sym 类型:java.awt.Component.setText 名称:服务器类:class javax.swing.JTextField

private void loadConfigs() 
    List<Component>  compList = getAllComponents(this);
    System.out.println("Tamaño "+compList.size());
    for(int i=0; i<compList.size();i++) 
       if(compList.get(i).getName() != null) 
           System.out.println("Nombre: "+compList.get(i).getName() +" Clase:"+ compList.get(i).getClass().toString());
           if(compList.get(i).getClass().toString().matches("class javax.swing.JTextField")) 
               System.out.println("Machea load " +compList.get(i).getName() + compList.get(i).toString());
               compList.get(i).setText(rootFrame.config.get(compList.get(i).getName()));
           
           else if(compList.get(i).getClass().toString().matches("class javax.swing.JCheckBox")) 
                if (rootFrame.config.get(compList.get(i).getName()) == null) 
                    compList.get(i).setSelected(false);
                
                else 
                    compList.get(i).setSelected(true);
                
           
       
    

public static List<Component> getAllComponents(final Container c) 
    Component[] comps = c.getComponents();
    List<Component> compList = new ArrayList<Component>();
    for (Component comp : comps) 
        compList.add(comp);
        if (comp instanceof Container) 
            compList.addAll(getAllComponents((Container) comp));
        
    
    return compList;

【问题讨论】:

“为了能够在我开发应用程序时更快地添加更多选项,我决定将所有输入的组件放在一个框架中” “在一个大桶里”,这对我来说同样有意义。框架和快速添加东西有什么关系? 【参考方案1】:

这里:

compList.get(i).setText(....)

编译器仅将compList.get(i) 视为组件。要使用 JTextField 方法,您必须首先将其转换为 JTextField。

((JTextField)compList.get(i)).setText(....)

不过,在我看来,您的计划很笨拙且非常不符合 OOP。

也许您想创建一个Map&lt;String, JTextField&gt; 并为该类提供一个公共方法来获取与代表 JTextField 所代表内容的字符串关联的文本字段所持有的字符串。

【讨论】:

谢谢!两个答案都很完美!【参考方案2】:

你应该使用这样的东西:

if(compList.get(i) instanceof JTextField) 
    JTextField field = (JTextField) compList.get(i);
    field.getText(); // etc

而不是你一直在做的getClass().toString 检查。

【讨论】:

谢谢!两个答案都很完美!

以上是关于Java,Swing,获取和更改所有输入字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 java swing 运行时更改语言

Java Swing - 如何更改 JPanel 的 TitledBorder 上的字体大小?

java 如何获得磁盘名称

我必须使用哪个 Swing 组件在 java 的同一字段中应用不同样式的文本

自动表格填写 ms 访问

是否对独立 Swing 应用程序中的所有字段使用私有修饰符?