在我问问题之前,可以使用此answer for my question从动态添加的jTextFieldsjComboBoxes中获取价值。

现在在我的subPanel中,我有3个jComboBoxes和4个jTextFields

为了获得jComponent的值,我正在使用以下代码:

Component[] children = jPanel1.getComponents();
// iterate over all subPanels...
for (Component sp : children) {
    if (sp instanceof subPanel) {
        Component[] spChildren = ((subPanel)sp).getComponents();
        // now iterate over all JTextFields...
        for (Component spChild : spChildren) {
            if (spChild instanceof JTextField) {
                String text = ((JTextField)spChild).getText();
                System.out.println(text);
            }
        }
    }
}


我想问一下是否可以分别访问每个jComboBoxesjTextFields,即我可以操纵每个jComponent并为其设置不同的值吗?我该如何实现?

先感谢您。

最佳答案

我想问问是否可以分别访问每个jComboBoxes和jTextField,即我可以操纵每个jComponent并将它们设置为不同的值吗?我该如何实现?


可以遍历组件的引用,而不是遍历Component层次结构(这对于Layout更改是脆弱的)。下面的示例是一个类,其中包含Child组件的实例变量:

public class ComponentWrapper extends JComponent{

    private JComboBox combo;
    private JTextArea textArea;

    public ComponentWrapper(){
        combo = new JComboBox();
        textArea = new JTextArea();
        add(combo);
        add(textArea);
    }

    public Text getTextArea(){
        return textArea;
    }

    public JComboBox getComboBox(){
        return comboBox;
    }
}


上面的类扩展了JComponent,在构造函数中添加了组件,并且可以将其添加到其他位置的另一个Container中。请注意,以上类只是如何执行此操作的示例,并且可能需要根据您的要求进行进一步调整。用法:

ComponentWrapper wrapper = new ComponentWrapper ();
add(wrapper);
revalidate();//if adding 'dynamically'

//later, when you want to get the text
String text = wrapper.getTextArea().getText();

08-05 07:56
查看更多