- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Java Nimbus 外观和感觉 的新手。我正在尝试使用 Nimbus 的功能来自定义单个组件实例,使用 putClientProperty("Nimbus.Overrides", overrides)
: https://docs.oracle.com/javase/8/docs/api/javax/swing/plaf/nimbus/package-summary.html
我遇到了以下问题(错误?):
不幸的是,“Nimbus.Overrides”值显然不仅会影响其明确设置的组件对象,还会影响其他对象。
似乎自定义属性以某种方式“继承”到相同类型的其他(后来“样式化”,显然不是以前)实例。我需要确保只对一个单独的实例进行更改(不影响任何其他对象)。示例 - JButton
使用过,但遇到了与例如相同的问题JTabbedPane
和定制画家:
button 1
- 自定义属性 A(内容边距)。button 2
- 仅属性 B(字体)自定义 - 但属性 A 的更改也可见(更大的 manrgins),“以某种方式继承”自 button 1
.button 3
- 没有自定义属性(使用空属性映射) - 两个更改 (A+B) 似乎都是从 button1
继承的(更大的边距,更大的字体)和 button2
button 4
- 默认外观 o JButton(无自定义)
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIDefaults;
public class NimbusPerComponentTest extends JFrame {
public NimbusPerComponentTest() {
super("Test");
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
// 4 buttons to test
JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 2");
JButton button3 = new JButton("Button 3");
JButton button4 = new JButton("Button 4");
add(button1);
add(button2);
add(button3);
add(button4);
pack();
// style
// button 1
UIDefaults overrides1 = new UIDefaults();
overrides1.put("Button.contentMargins", new Insets(10,10,10,10));
button1.putClientProperty("Nimbus.Overrides", overrides1);
// button 2
UIDefaults overrides2 = new UIDefaults();
overrides2.put("Button.font", new Font("Sans Serif", Font.BOLD, 15));
button2.putClientProperty("Nimbus.Overrides", overrides2);
// button 3
UIDefaults overrides3 = new UIDefaults();
// nothing = left empty
button3.putClientProperty("Nimbus.Overrides", overrides3);
// button 4
// no styling
}
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(NimbusPerComponentTest.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NimbusPerComponentTest().setVisible(true);
}
});
}
}
知道为什么吗?我错过了什么?任何优雅的解决方法?(Java 8, Windows 10)
编辑
经过一些答案的启发:
尝试在我的原始代码末尾重置外观(为 null 并再次返回到 Nimbus,包括 SwingUtilities.updateComponentTreeUI),唯一的结果是:
现在即使是 button4 也画错了(边距和字体都改变了),尽管通用默认值从未被触及......很奇怪。
编辑 2
我设法找到了一个单行解决方法/hack。查看我自己对我的问题的回答...
最佳答案
如果我更改 UIDefaults
的创建,它对我有用。而不是
UIDefaults overrides1 = new UIDefaults();
我用过
UIDefaults overrides1 = (UIDefaults) UIManager.getLookAndFeelDefaults().clone();
对 overrides2
和 overrides3
也执行此操作:
// style
// button 1
UIDefaults overrides1 = (UIDefaults) UIManager.getLookAndFeelDefaults().clone();
overrides1.put("Button.contentMargins", new Insets(10, 10, 10, 10));
button1.putClientProperty("Nimbus.Overrides", overrides1);
// button 2
UIDefaults overrides2 = (UIDefaults) UIManager.getLookAndFeelDefaults().clone();
overrides2.put("Button.font", new Font("Sans Serif", Font.BOLD, 15));
button2.putClientProperty("Nimbus.Overrides", overrides2);
// button 3
UIDefaults overrides3 = (UIDefaults) UIManager.getLookAndFeelDefaults().clone();
// nothing = left empty
button3.putClientProperty("Nimbus.Overrides", overrides3);
// button 4
// no styling
这会在我的机器上产生以下输出:
请注意,以这种方式创建的 UIDefaults
的大小可能非常大。
关于Java Nimbus Look and Feel per component customization ("Nimbus.Overrides") - 其他实例也受影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49815702/
我是 Java Nimbus 外观和感觉 的新手。我正在尝试使用 Nimbus 的功能来自定义单个组件实例,使用 putClientProperty("Nimbus.Overrides", overr
我正在使用 java 7 update 17 和 netBeans IDE 7.3 我想将 nimbus 设置为每个 GUI 项目的默认值,但 Oracle 网站指令不起作用。 how to set
我正在制作一个程序,该程序应该尽可能独立于平台。我正在使用 Nimbus LAF。 我想知道,我应该担心字体吗?它的默认字体是包含在 LAF 本身中还是从平台获取? 最佳答案 这是默认的非系统字体。
如何自定义 Nimbus 外观中组件的图像?我想在 Photoshop 中创建图像并放置在一些 Nimbus 外观和感觉组件上,这些是我想要更改的组件: 滚动条按钮旋钮滚动条拇指滚动条滚动条轨道 谢谢
在 Nimbus 的网络照片应用程序示例中,当我返回表格(从 Facebook 或 Dribbble 中选择要下载照片的位置)时,我之前看到的和缓存中的照片都会从其中清除。有办法防止这种情况吗? 例如
我想更改选项卡标题的颜色。 我尝试设置不同的属性,但没有任何变化。 在我的 main 中,我将属性 text 设置为白色,因此所有文本都是白色的。 现在我想更改一些组件文本,例如选项卡 Pane ,但
我已经创建了一个文本字段组件,里面有一个“x”按钮,可以清除该字段的文本。它在使用 Window 的系统外观和感觉(对于 Windows)时效果很好,但是我在使用 Nimbus 时尝试获得正确的外观时
引用这个错误: 4848910 : UIManager only updates colors once 我的 JFrame 上有两个按钮。从第一个按钮开始,我将 LAF 颜色更改为 UIManage
所以,我的程序中有一个使用 Nimbus LAF 的 JTextArea。由于一些功能问题,我需要将其替换为 JTextPane。 但是,JTextArea 默认情况下有一个绘制的边框。 JTextP
我正在使用 NIPagingScrollView在 iPhone 上显示多个页面。 每次我翻到一个页面,下一页也被预先加载,这很好。 当我旋转 iPhone从纵向模式到横向模式,我让layoutSub
我正在使用 Nimbus显示带有擦洗器和可缩放 ImageView 的相册。我使用网络图像,并在加载最终图像之前显示缩略图。 NIPhotoAlbumScrollView提供方法didLoadPhot
我正在尝试覆盖 JLabel 的一些 nimbus 属性。 UIDefaults labelDefault = new UIDefaults(); labelDefault.put("Labe
刚接触java,有一个问题,无论我做什么似乎都无法解决,所以任何我们将非常感谢您的帮助。 我有一个Java小应用程序,并集成了一个弹出日历(WWW)使用 Nimbus 外观和感觉的可用。我的问题是我无
我正在尝试全局更改工具提示的大小。 我正在使用: UIManager.put("ToolTip.font", new Font("SansSerif",Font.PLAIN,25)); 总体来说效果很
我们正在使用 Nimbus LaF 开发一个 Swing 应用程序。我们更改了许多 Nimbus 默认设置(控件、文本、NimbusLightBackground 等)以拥有深色主题。 现在我们在渲染
我想验证表格单元格中的用户输入,并且我使用了 Nimbus 外观。这是验证整数输入的单元格编辑器的代码:WholeNumberField它扩展了 JTextField 并添加了输入验证。 当我为列设置
我想知道为什么 Nimbus会以某种方式与 Virtual keys 发生冲突.查看我在下面制作的示例: public class buttontest implements ActionLi
只是寻找一些文档。 最佳答案 Nimbus 基于 Synth,因此您应该从 Synth 的角度考虑对其进行自定义,这一点已有详细记录。 关于java - 有人有关于 Nimbus 外观和感觉定制的信息
我想更改选项卡选项卡的高度,为此我尝试了多种方法,但没有成功。首先,我尝试使用间隔图标,高度很好,但选项卡的文本不再居中。然后我尝试更改 Nimbus L&F 属性,TabbedPane.tabIns
我有例如 UIDefaults defaults = UIManager.getLookAndFeelDefaults(); defaults.put("text",Color.GREEN);` 文本
我是一名优秀的程序员,十分优秀!