繁体   English   中英

重新添加组件后,JCheckBox组件未显示在JPanel上

[英]JCheckBox components doesn't show on JPanel after re adding them

我正在尝试在JDialogBox中包含的JScrollPanel中创建一个JCheckBox列表。这是我的代码:

public void initTableChoices(DatabaseInit db){

    checkList = new ArrayList<>();

    //containerToScroll is the JPane, with boxLayout, that contains all the JCheckBoxes

    scrollPane = new JScrollPane(containerToScroll); 
    scrollPane.setSize((this.getSize().width/2),this.getSize().height - 10);
    scrollPane.setLocation((ExportDialogBox.getSize().width)/2, 0);

    ExportDialogBox.setSize(defaultSize);

    for(int i = 0; i < db.numberOfTables; i++){

        checkList.add(new JCheckBox(db.fileNames[i], false));
        containerToScroll.add(checkList.get(i));

    }

    ExportDialogBox.add(scrollPane, BorderLayout.CENTER);

    containerToScroll.revalidate();
    containerToScroll.repaint();
    containerToScroll.updateUI();
    scPane.revalidate();
    scPane.repaint(); 
    ExportDialogBox.revalidate();
    ExportDialogBox.repaint();
}

上面的方法在第一次被调用时,可以满足我的要求,并具有以下结果:

首次调用方法InitTableChoices后的对话框

当我想删除所有的JCheckBoxes来创建一些新的JCheckBoxes,然后再调用initTableChoices方法绘制它们时,我首先调用下面的方法将其删除:

    public void deleteTableChoices(DatabaseInit db){


    checkList.removeAll(checkList);
    containerToScroll.removeAll();

    scPane.revalidate();
    scPane.repaint();
    containerToScroll.revalidate();
    containerToScroll.repaint();
    ExportDialogBox.revalidate();
    ExportDialogBox.repaint();

}

然后再次调用InitTableChoices方法,我得到以下结果:

首次调用方法DeleteTableChoicesInitTableChoices之后的对话框

因此,它仅显示列表中我拥有的第一个JCheckBox,而未显示其他JCheckBox。

有谁知道为什么会这样吗?

在您的initTableChoices方法行中

scrollPane = new JScrollPane(containerToScroll);

containerToScroll添加为scrollPane组件的子级。

initTableChoices运行initTableChoices时, containerToScroll将被分配给新的 JScrollPane实例,但不会将此新的JScrollPane实例添加到组件层次结构中。 结果,您正在有效地从组件层次结构中删除containerToScroll

我的建议是提取实际将复选框添加到containerToScroll的循环到一个新方法中,让initTableChoices调用此方法,并将对initTableChoices的第二次调用替换为对新方法的调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM