运行时添加组件后JMenu无法自动调整大小该如何解决
问题根因
JMenu的弹出容器JPopupMenu在已展开状态下,内部组件的可见性切换不会自动触发布局重计算,只有在首次打开菜单时才会根据内部组件状态计算尺寸,所以关闭再重新打开后显示就正常了。
解决方案
只需要在切换滑块可见性的逻辑后,手动触发弹出菜单的尺寸重算和重绘即可,修改你的actionPerformed方法如下:
@Override public void actionPerformed(ActionEvent e) { if (e.getSource().equals(checkBox1)) { slider1.setVisible(checkBox1.isSelected()); // 新增以下3行代码即可解决重叠问题 JPopupMenu menuPopup = menu.getPopupMenu(); menuPopup.pack(); menuPopup.repaint(); } }
代码说明
menu.getPopupMenu():获取JMenu对应的弹出层容器,所有菜单项、滑块都挂载在这个容器内pack():根据当前所有可见组件的首选尺寸,重新计算弹出菜单的宽高,自动扩展高度容纳所有内容repaint():触发界面重绘,消除原有布局残留的重叠显示问题
如果后续你要给其他复选框也加对应滑块,只需要在对应滑块的可见性切换逻辑后,同样执行上述3行代码即可。
内容的提问来源于stack exchange,提问作者brtk
相关产品推荐
相关产品推荐

