我动态地添加subPanel到jPanel1(与jTextField和jButton)。部分代码是从那里借来的。
subPanel
jPanel1
jTextField
jButton
我正在尝试从的组件获取文本jPanel1,但无法成功。
编辑: 这是一个包含子面板jTextField,+Button和-Button。
+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不起作用:
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);
}
您的答复将不胜感激。
问题是:您正在遍历以下子项jPanel1:
jPanel1.getComponents();
并期望有一个JTextField:
JTextField
if (children[i] instanceof JTextField){ String text = ((JTextField)children[i]).getText(); System.out.println(text); }
但是,既然您已经添加subPanels了jPanel1,jPanel1的子项就subPanels不会了JTextFields!
subPanels
JTextFields
因此,要访问JTextFields,您必须subPanels在一秒钟内遍历的子项for-loop!
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); } } } }