You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:27:11