在我问问题之前,可以使用此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
并为其设置不同的值吗?我该如何实现?先感谢您。
最佳答案
我想问问是否可以分别访问每个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();