微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自 Java 9 以来更改了 Swing TitledBorder 的外观

如何解决自 Java 9 以来更改了 Swing TitledBorder 的外观

我注意到在具有原生外观的 Windows 上,Java 8(及更早版本)和 Java 9(及更高版本)之间 TitledBorder 的外观有所不同。从 Java 9 开始,边框变暗并且没有圆角。尤其是嵌套的 TitledBorder,这看起来令人不安。有没有办法使用 Java 9 并像 Java 8 一样绘制边框?

Java 8 vs Java 9

MWE:

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.TitledBorder;

public class TitledBorderWithJava9 {
    public static void main(String[] args) {
        SwingUtilities.invokelater(() -> {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (Exception e) {
                //...
            }
            JFrame frame = new JFrame();
            frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(150,100);
            JPanel panel = new JPanel();
            frame.add(panel);
            
            TitledBorder border = BorderFactory.createTitledBorder("Title");
            panel.setBorder(border);
            
            frame.setVisible(true); 
        });
    }
}

解决方法

根据对问题的评论,以下方法接近预期的结果(颜色和尺寸是正确的,但我没有像在 Java 8 中那样设法获得圆角)。

Border baseBorderOuter = BorderFactory.createLineBorder(new Color(213,223,229),1,true);
Border baseBorderInner = BorderFactory.createLineBorder(Color.WHITE,true);
Border baseBorder = BorderFactory.createCompoundBorder(baseBorderOuter,baseBorderInner);

TitledBorder border = BorderFactory.createTitledBorder(baseBorder,"Title");
panel.setBorder(border);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。