【发布时间】:2021-10-02 13:37:51
【问题描述】:
我注意到在具有原生外观的 Windows 上,Java 8(及更早版本)和 Java 9(及更高版本)之间的TitledBorder 外观有所不同。从 Java 9 开始,边框变暗并且没有圆角。尤其是嵌套TitledBorder,这看起来令人不安。有没有办法使用 Java 9 并像 Java 8 一样绘制边框?
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 并复制它。这可能有效,如果无效,您可以尝试通过
UIManager.pu("property", "value")更改 UI 属性,如果 java 版本大于 8。 -
你可以指定你想要的任何基本边框
createTitledBorder以获得你想要的外观(我不会讨论品味)。实际的问题是,当实际 Window 的外观使用单色线边框时,为什么系统外观使用(软)斜角边框。 -
感谢两位提供帮助的 cmets! @Frédéric Perron:不幸的是,这并不像看起来那么简单,因为该类引用了许多不是公共 API 的相关类,这会导致进一步的问题。 @Holger:我尝试了这种方法并接近了预期的结果,请参阅下面的答案。
标签: java swing java-9 titled-border