小编典典

从动态添加的jPanel获取文本

java

我动态地添加subPaneljPanel1(与jTextFieldjButton)。部分代码是从那里借来的。

我正在尝试从的组件获取文本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不起作用:

     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);

}

您的答复将不胜感激。


阅读 217

收藏
2020-10-18

共1个答案

小编典典

问题是:您正在遍历以下子项jPanel1

jPanel1.getComponents();

并期望有一个JTextField

if (children[i] instanceof JTextField){
     String text = ((JTextField)children[i]).getText();
     System.out.println(text);
}

但是,既然您已经添加subPanelsjPanel1,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);
            }
        }
    }
}
2020-10-18