我正在动态subPanel
添加到jPanel1
(jTextField
和jButton
)。部分代码是从there借来的。
我正在尝试从jPanel1
的组件中获取文本,但无法成功。
编辑:
这是一个包含jTextField
,+Button
和-Button
的子面板。
private class subPanel extends javax.swing.JPanel {
subPanel me;
public subPanel() {
super();
me = this;
JTextField myLabel = new JTextField(15);
add(myLabel);
JButton myButtonRemove = new JButton("-");
JButton myButtonAdd = new JButton("+");
add(myButtonRemove);
add(myButtonAdd);
这是AddButton的代码:
jPanel1.add(new subPanel());
pack();
我尝试从jTextField
获取文字的code无效:
Component[] children = jPanel1.getComponents();
for (int i=0;i<children.length;i++){
if (children[i] instanceof JTextField){
String text = ((JTextField)children[i]).getText();
System.out.println(text);
}
非常感谢您的回复。
答案 0 :(得分:0)
问题是:您正在迭代jPanel1
的孩子:
jPanel1.getComponents();
期待有JTextField
:
if (children[i] instanceof JTextField){
String text = ((JTextField)children[i]).getText();
System.out.println(text);
}
但是,由于您已将subPanels
添加到jPanel1
,因此jPanel1的子项为subPanels
,而不是JTextFields
!
因此,为了访问JTextFields
,您必须在一秒subPanels
内迭代for-loop
的孩子!
示例:强>
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);
}
}
}
}
答案 1 :(得分:0)
我知道这个问题有点老了,但仍然可以帮助更多的未来观众。 我最初的回应是在@Oliver Schmidt中将其写为评论,但是由于我还没有50声望,所以决定在一个单独的答案中写这个。
要访问动态添加的jPanel "subPanel"
中包含的组件,您不一定需要使用第二个for循环,您可以使用以下行直接访问subPanel
的组件代码,例如
字符串s1 = (((subPanel)sp) .jcb1.getSelectedItem()。toString()。substring(1、2); ...
所以总体代码如下,
String s1;
String s2;
String s3;
String text;
Component[] c = jPanel1.getComponents();
for (Component sp : c) {
if (sp instanceof subPanel) {
//access the component from properly type converted subPanel
s1 = ((subPanel) sp).jcb1.getSelectedItem().toString().substring(1, 2);
s2 = ((subPanel) sp).jcb2.getSelectedItem().toString().substring(1, 2);
s3 = ((subPanel) sp).jcb3.getSelectedItem().toString().substring(1, 2);
text = ((subPanel) sp).myLabel.getText();
}
}
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(text);