java - 自 Java 9 以来更改了 Swing TitledBorder 的外观
问题描述
我注意到TitledBorder
具有原生外观的 Windows 上的 Java 8(及更早版本)和 Java 9(及更高版本)的外观有所不同。从 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 中那样拥有圆角)。
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);
推荐阅读
- python - 为什么我应该使用散列向量器进行文本聚类?
- node.js - 无法使用 Node.js 从嵌套目录中获取文件内容
- macos - 在 macOS 上通过终端输入 Sublime Text 许可证密钥
- spring - 方面未运行 | 弹簧启动
- javascript - 在 IndexedDB 成功处理程序之外更新变量
- java - WebClient.RequestHeadersSpec 是原始类型
- python - 只删除熊猫中完全空的行
- spyder - 如何在不关闭的情况下保存 Spyder IDE 状态?
- mvvm - 尽管正在观察 MediatorLiveData onChanged,但未调用它
- ruby-on-rails - Rails 路由未定义方法