JComboBox下拉菜单超出父对话框边界致Swing应用异常
Swing JComboBox下拉菜单超出对话框边界时界面渲染错乱问题
- 问题现象:点击JComboBox后下拉菜单显示,随后Swing渲染器出现混乱,整个应用界面错乱,仅能通过重启恢复。
- 应用结构:包含JDialog,其中内置JComboBox组件及若干选项。
- 排查情况:日志无未捕获异常,经大量代码调试未定位到问题根源。
- 触发条件:仅当JComboBox下拉菜单底部超出JDialog窗口底部边界时才会出现问题;若下拉菜单完全处于对话框边界内,应用运行正常。
复现环境
Adopt OpenJDK 11.0.10+9
可复现测试代码
public static void main(String[] args) { JDialog dlg = new JDialog(); JComboBox<String> cb = new JComboBox<String>(); JPanel spChEastD2 = new JPanel(); JScrollPane spChEastScrollD2 = new JScrollPane(spChEastD2); spChEastScrollD2.setBorder(new TitledBorder("aaa")); JPanel channelsD2 = new JPanel(); channelsD2.setBorder(new TitledBorder("Channels")); channelsD2.setMinimumSize(new Dimension(200, 110)); channelsD2.setPreferredSize(new Dimension(600, 110)); channelsD2.setMaximumSize(new Dimension(Integer.MAX_VALUE, 110)); channelsD2.setLayout(new BoxLayout(channelsD2, BoxLayout.X_AXIS)); JPanel centerD2 = new JPanel(); centerD2.setLayout(new BoxLayout(centerD2, BoxLayout.Y_AXIS)); centerD2.add(channelsD2); channelsD2.add(spChEastScrollD2); spChEastD2.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10)); for (int i = 13; i < 54; i++) { cb.addItem("" + i); } spChEastD2.add(cb); dlg.add(centerD2); dlg.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); dlg.pack(); dlg.setVisible(true); }
问题表现
打开JComboBox下拉菜单后,界面出现严重渲染错乱,组件布局混乱、重叠,与正常界面差异明显。
内容的提问来源于stack exchange,提问作者Zur13
相关产品推荐
相关产品推荐

