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

自定义JPanel中JButton重叠显示问题排查与解决

问题原因
  • 核心bug出在MyButtonPanel的构造方法中:Arrays.fill(tab, new JButton())只会创建一个JButton实例,然后把数组所有元素都指向这个实例。也就是说tab[0]、tab[1]、tab[2]本质是同一个按钮对象。
  • Swing的规则是:同一个组件只能被添加到容器一次,多次添加只会让它停留在最后一次的位置,视觉上就表现为三个按钮重叠,面板也被压缩成极小尺寸。
解决方法

修改MyButtonPanel的构造方法,通过循环创建独立的JButton实例,替换Arrays.fill的错误用法:

class MyButtonPanel extends JPanel{
    JButton[] tab;
    public MyButtonPanel(int numOfButtons, LayoutManager layout) {
        this.tab = new JButton[numOfButtons];
        // 循环生成独立的JButton,避免引用同一个实例
        for (int i = 0; i < numOfButtons; i++) {
            tab[i] = new JButton();
        }
        this.setLayout(layout);
    }
}

额外优化:MyTopLeftPanel中重复调用的this.setLayout(new FlowLayout())可以删除,因为父类构造方法已经设置过布局。

修改后运行,三个按钮会作为独立组件,按照FlowLayout规则横向正常排列。

内容的提问来源于stack exchange,提问作者adamDud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:20:20