gpt4 book ai didi

java - 重新添加 JCheckBox 组件后,它们不会显示在 JPanel 上

转载 作者:行者123 更新时间:2023-12-02 10:59:48 24 4
gpt4 key购买 nike

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

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

上面的方法,当第一次被调用时,会做我想要的事情并有以下结果:

The DialogBox after calling the method InitTableChoices for the first time

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

    public void deleteTableChoices(DatabaseInit db){


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

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

}

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

The DialogBox after calling the methods DeleteTableChoices and InitTableChoices after the first time

所以它只显示我在列表中的第一个 JCheckBox,而不显示其他的。

有人知道为什么会发生这种情况吗?

最佳答案

在您的 initTableChoices 中方法行

scrollPane = new JScrollPane(containerToScroll);

将添加 containerToScroll作为 scrollPane 的 child 组件。

当您运行initTableChoices时第二次,containerToScroll将被分配给JScrollPane但这个新的实例 JScrollPane实例未添加到组件层次结构中。因此,您实际上删除了 containerToScroll来自您的组件层次结构。

我的建议是提取实际将复选框添加到 containerToScroll 的循环。进入一个新方法,有initTableChoices调用该方法,并替换第二次调用initTableChoices调用新方法。

关于java - 重新添加 JCheckBox 组件后,它们不会显示在 JPanel 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51419823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com