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

BorderLayout布局下JList遮挡中间边框及全量移动按钮功能异常问题

问题解决方案

问题1:JList遮挡BorderLayout中间区域

  • 原因:空JList绑定的JScrollPane默认没有固定首选宽度,BorderLayout布局计算时会优先满足东西区域的尺寸需求,挤压中间CENTER区域的显示空间,视觉上看起来像被JList遮挡。
  • 修复方案:给东西两侧的JScrollPane显式设置固定首选宽度,也可以给中间按钮面板加内边距避免和两侧列表紧贴:
// 导入需要的包
import java.awt.Dimension;
import javax.swing.BorderFactory;

// 原添加东西侧列表的代码修改为如下内容
JScrollPane leftScroll = new JScrollPane(list);
leftScroll.setPreferredSize(new Dimension(150, 0)); // 宽度固定150,高度由BorderLayout自动拉伸
c.add(leftScroll,BorderLayout.WEST);

JScrollPane rightScroll = new JScrollPane(list1);
rightScroll.setPreferredSize(new Dimension(150, 0));
c.add(rightScroll,BorderLayout.EAST);

// 给中间按钮面板加内边距,优化显示效果
jp1.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

问题2:leftall和rightall按钮功能不符合预期

  • 原因:原有逻辑在遍历列表Model的同时删除元素,会导致索引错位,部分元素无法被正确移动。例如列表有3个元素时,删除索引0的元素后,原索引1的元素会变为新的索引0,循环i自增到1时就会跳过该元素。
  • 修复方案:先把原列表所有元素批量添加到目标列表,再直接清空原列表,避免索引错误:
// 修正>>按钮(全部移到右侧)逻辑
rightall.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        super.mouseClicked(e);
        // 先把左侧所有元素添加到右侧
        for(int i=0; i<listmodel1.getSize();i++){
            listmodel2.addElement(listmodel1.getElementAt(i));
        }
        // 清空左侧列表
        listmodel1.clear();
    }
});

// 修正<<按钮(全部移到左侧)逻辑
leftall.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        super.mouseClicked(e);
        // 先把右侧所有元素添加到左侧
        for(int i=0; i<listmodel2.getSize();i++){
            listmodel1.addElement(listmodel2.getElementAt(i));
        }
        // 清空右侧列表
        listmodel2.clear();
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:06:10