Linux/GTK环境下JComboBox渲染尺寸超出父级JInternalFrame的问题求助
Linux/GTK环境下JComboBox渲染尺寸超出父级JInternalFrame的问题求助
大家好,我最近在Linux环境(已在Ubuntu+GTK外观主题下验证,大概率其他GTK系桌面也会出现)遇到了JComboBox的渲染异常问题,想请各位帮忙分析下原因和可行的解决办法。
问题场景是这样的:当我在JInternalFrame里创建一组JComboBox组件时,这些下拉框的实际渲染尺寸似乎比父级框架计算的要大。在Linux上运行时,第5个JComboBox只能显示一部分;但在Windows环境下所有组件都能完整显示。
对应的对话框代码如下:
public class DebugDialog extends JInternalFrame { public DebugDialog() { super("Debug Dialog"); setDefaultCloseOperation(DISPOSE_ON_CLOSE); JPanel panel = new JPanel(); add(panel); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); for (int i = 0; i < 5; i++) { panel.add(new JComboBox<>(new Integer[]{1, 2, 3, 4, 5})); } validate(); pack(); } public void showDialog(JDesktopPane desktopPane) { desktopPane.add(this); setVisible(true); moveToFront(); } }
调用这段代码的方式如下:
JDesktopPane jDesktopPane = ; // 从父应用传入,通常是new JDesktopPane()创建的实例 DebugDialog debugDialog = new DebugDialog(); debugDialog.showDialog(jDesktopPane);
根据用户反馈,这个问题是最近才出现的,我现在有点摸不着头脑。我检查过调用pack()前后组件的各种尺寸(最大、最小、首选尺寸),返回值都是一样的,但看起来子组件上报给父容器的尺寸比实际渲染时用的要小。
补充个细节:如果框架里只放一个JComboBox,显示是完全正常的;添加的下拉框越多,底部的组件超出边框的情况就越严重。换成其他Swing组件的话,还没发现类似问题。
有没有朋友遇到过类似情况,或者有什么排查思路可以分享下?
内容来源于stack exchange
相关产品推荐
相关产品推荐

