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

Windows外观下JScrollPane与滚动条间出现白色线条如何消除

问题现象

gui
可以看到容器与滚动条之间存在一条白色线条:
问题截图
运行环境:Windows 10,Java 1.8

解决方案

这条白线可以消除,它是Windows系统原生LookAndFeel下,JScrollPane默认自带的1像素内边框、以及中间视口(Viewport)的默认边距导致的。你之前只设置了滚动条和JScrollPane本身的透明属性,漏了视口和JScrollPane默认边框的处理,补充以下配置即可:

  • 移除JScrollPane的默认系统边框
  • 关闭视口的默认背景绘制和边距
  • 可选:提前在UIManager中全局禁用ScrollPane的默认边框

修复后完整代码

public class WhitePixels {
    public static void main(String[] args) throws Exception {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        // 全局禁用ScrollPane默认边框,可选配置
        UIManager.put("ScrollPane.border", BorderFactory.createEmptyBorder());
        JFrame f = new JFrame("A");

        JPanel container = new JPanel();
        container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
        for (int i = 0; i < 15; i++) {
            container.add(new JButton("A"));
        }

        f.setLayout(new BorderLayout());

        JScrollPane sp = new JScrollPane(container);
        // 移除JScrollPane本身的边框
        sp.setBorder(BorderFactory.createEmptyBorder());
        sp.setOpaque(false);
        // 处理视口的属性
        sp.getViewport().setOpaque(false);
        sp.getViewport().setBorder(BorderFactory.createEmptyBorder());
        // 处理滚动条属性
        sp.getVerticalScrollBar().setOpaque(false);
        sp.getVerticalScrollBar().setBorder(BorderFactory.createEmptyBorder());
        
        f.add(sp);

        f.pack();
        f.setSize(200, 200);
        f.setLocationByPlatform(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

修改后重新编译运行即可消除容器和滚动条之间的白色线条。

内容的提问来源于stack exchange,提问作者George Z.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:24:04