在我提出问题之前,可以使用此answer for my question动态添加jTextFields
和jComboBoxes
来获取价值。
现在我的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);
}
}
}
}
我想问一下,是否可以分别访问每个jComboBoxes
和jTextFields
,即我可以操纵每个jComponent
并设置不同的值吗?我怎样才能做到这一点?
提前谢谢。
答案 0 :(得分:2)
我想问一下是否可以分别访问每个jComboBoxes和jTextFields,即我可以操作每个jComponent并设置不同的值吗?我怎样才能做到这一点?
您可以保留对组件的引用,而不是遍历组件层次结构(对布局更改很脆弱)。以下示例是一个包含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();
答案 1 :(得分:0)
由于这两个类(JComboBox
和JTextField
)都延伸JComponent
,您可以创建ArrayList
并将其添加到其中。即。
ArrayList<JComponent> components = new ArrayList<JComponent>();
JComboBox pie = new JComboBox();
components.add(pie)
//pie is now stored in components as a JComponent
当您需要引用pie
时,您可以致电:
JComboBox pie = (JComboBox) components.get(0);
这可以通过任何JComponent
来完成,并且只需将其投射到它上面即可引用它。然而,这种方法可能会导致一些混淆。因此,您应该记住添加它们的顺序,或者以非常特定的方式添加它们(例如,首先是TextFields,然后是ComboBoxes)。