自Java 9以来,Swing TitledBorder的外观已更改。

3
我注意到在使用本机外观的Windows上,Java 8(及更早版本)和Java 9(及更高版本)的TitledBorder的外观有所不同。从Java 9开始,边框变暗了并且没有圆角。特别是对于嵌套的TitledBorder,这看起来很令人不安。是否有一种方法可以在使用Java 9时使边框像在Java 8中绘制一样? Java 8 vs Java 9
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); 
        });
    }
}

3
因为“look and feel”是一个类,你可以获取Java 8版本的该类并复制它。这可能有效,如果无法实现,你可以尝试通过UIManager.put("属性", "值")更改UI属性,若Java版本大于8。 - Frédéric Perron
1
您可以指定任何基础边框来使用createTitledBorder以获得所需的外观(我不会讨论品味)。实际问题是,为什么系统的外观和感觉使用(柔和的)斜面边框,而实际的窗口外观使用单色线边框。 - Holger
非常感谢你们的有用评论!@Frédéric Perron:很遗憾,这并不像看起来那么简单,因为该类引用了许多不是公共API的相关类,这会导致进一步的问题。@Holger:我尝试了这种方法,并且接近了期望的结果,请参见我的下面回答。 - user7291698
1个回答

1
根据问题的评论,以下方法接近所需的结果(颜色和尺寸正确,但我无法像在Java 8中那样拥有圆角)。
Border baseBorderOuter = BorderFactory.createLineBorder(new Color(213, 223, 229), 1, true);
Border baseBorderInner = BorderFactory.createLineBorder(Color.WHITE, 1, true);
Border baseBorder = BorderFactory.createCompoundBorder(baseBorderOuter, baseBorderInner);

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

1
你尝试过使用BorderFactory.createLoweredSoftBevelBorder()吗?还有一个版本可以明确设置颜色... - Holger
1
是的,我尝试过那种方法,还有带有4个颜色参数和类似凹陷边框的方法。但是如果你仔细看像素,它们仍然不相等。一个问题是圆角的半径,另一个问题是凹陷边框有内部和外部颜色,但在WindowsLookAndFeel中,底部边框的内外颜色是反转的(即外部颜色在底部内部,在左/上/右边则是外部)。 - user7291698

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接