java - JCheckBox 组件在重新添加后不显示在 JPanel 上
问题描述
我正在尝试在包含在 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方法后的DialogBox
当我想删除所有的 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方法,我得到以下结果:
第一次调用DeleteTableChoices和InitTableChoices方法后的DialogBox
所以它只显示我在列表中的第一个 JCheckBox 而没有显示其他的。
有谁知道为什么会这样?
解决方案
在您的initTableChoices
方法行中
scrollPane = new JScrollPane(containerToScroll);
将添加containerToScroll
为组件的子scrollPane
组件。
当您initTableChoices
第二次运行时,containerToScroll
将分配给一个新 JScrollPane
实例但这个新JScrollPane
实例并未添加到组件层次结构中。结果,您有效地containerToScroll
从组件层次结构中删除。
我的建议是将实际添加复选框的循环提取containerToScroll
到新方法中,initTableChoices
调用此方法,然后将第二次调用替换initTableChoices
为对新方法的调用。
推荐阅读
- python-3.x - 对微秒数据进行排序并节省时间
- python - 如何替换列表的值?
- html - 如何使用 HTML 和 CSS 在网站顶部制作此特定导航菜单?
- api - 使用 Github API 将所有状态检查设置为分支保护所需
- ruby-on-rails - Ruby on Rails 6. 重定向后使用 Ajax
- typescript - 是否可以为脚本加载库提供打字稿声明文件?
- python-3.x - 无法导入手电筒音频“没有可用的音频后端。”
- maven - 是否可以使用 Maven POM 文件为 Maven 发布插件配置 GIT Tag?
- r - 试图理解另一个人的 R 代码的新手
- reactjs - 使用钩子更新返回的 json