- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的程序中有两个按钮
JButton button1 = new JButton();
button1.setText("First Button");
JButton button2 = new JButton("Second Button");
我已经尝试更改按钮的 LaF,我可以使用以下代码更改按钮背景颜色
UIManager.put(Button.background new color(134,201,236));
但是当我尝试更改其他键值时,例如 "Button.disabled"
、"Button[Default+Focused+Pressed].backgroundPainter"
代码没有为我工作。有人可以帮助我如何更改使用 Painter 的默认键值吗?
最佳答案
我爱 Nimbus。
好的,开始吧,您需要使这些值保持接近...
Button.background = DerivedColor(color=214,217,223 parent=control offsets=0.0,0.0,0.0,0 pColor=214,217,223
Button.contentMargins = javax.swing.plaf.InsetsUIResource[top=6,left=14,bottom=6,right=14]
Button.defaultButtonFollowsFocus = false
Button.disabled = DerivedColor(color=214,217,223 parent=control offsets=0.0,0.0,0.0,0 pColor=214,217,223
Button.disabledText = DerivedColor(color=142,143,145 parent=nimbusDisabledText offsets=0.0,0.0,0.0,0 pColor=142,143,145
Button.focusInputMap = javax.swing.plaf.InputMapUIResource@70e4bd3a
Button.font = javax.swing.plaf.FontUIResource[family=SansSerif,name=sansserif,style=plain,size=12]
Button.foreground = DerivedColor(color=0,0,0 parent=text offsets=0.0,0.0,0.0,0 pColor=0,0,0
ButtonUI = javax.swing.plaf.synth.SynthLookAndFeel
Button[Default+Focused+MouseOver].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@3e5d2085
Button[Default+Focused+Pressed].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@78662669
Button[Default+Focused].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@2988e80b
Button[Default+MouseOver].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@7c508d6d
Button[Default+Pressed].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@2b5ec36a
Button[Default+Pressed].textForeground = DerivedColor(color=255,255,255 parent=nimbusSelectedText offsets=0.0,0.0,0.0,0 pColor=255,255,255
Button[Default].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@62c2ed06
Button[Disabled].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@c6499e5
Button[Disabled].textForeground = DerivedColor(color=142,143,145 parent=nimbusDisabledText offsets=0.0,0.0,0.0,0 pColor=142,143,145
Button[Enabled].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@742746e1
Button[Focused+MouseOver].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@293f9e9c
Button[Focused+Pressed].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@5ce0ec60
Button[Focused].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@7463fda8
Button[MouseOver].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@3a3dad8b
Button[Pressed].backgroundPainter = javax.swing.plaf.nimbus.ButtonPainter@6f231f2e
这些基本上是 Nimbus 用来绘制标准按钮的默认键/值...
基本上,您要做的就是提供您自己的Painter
,例如...
public class ButtonPainter implements Painter {
private Color light, dark;
private GradientPaint gradPaint;
public ButtonPainter(Color light, Color dark) {
this.light = light;
this.dark = dark;
}
@Override
public void paint(Graphics2D g, Object c, int w, int h) {
System.out.println("...");
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
gradPaint = new GradientPaint((w / 2.0f), 0, light, (w / 2.0f), (h / 2.0f), dark, true);
g.setPaint(gradPaint);
g.fillRect(2, 2, (w - 5), (h - 5));
Color outline = new Color(0, 85, 0);
g.setColor(outline);
g.drawRect(2, 2, (w - 5), (h - 5));
Color trans = new Color(outline.getRed(), outline.getGreen(), outline.getBlue(), 100);
g.setColor(trans);
g.drawRect(1, 1, (w - 3), (h - 3));
}
}
然后替换 UIManager
值
UIManager.getLookAndFeelDefaults().put("Button[Enabled].backgroundPainter", new ButtonPainter(Color.YELLOW, Color.RED));
UIManager.getLookAndFeelDefaults().put("Button[Focused].backgroundPainter", new ButtonPainter(Color.YELLOW, Color.RED));
例如……
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.RenderingHints;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.Painter;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.ColorUIResource;
public class TestNimbus {
public static void main(String[] args) {
new TestNimbus();
}
public TestNimbus() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
System.out.println(UIManager.get("Button[Default+Focused].backgroundPainter"));
UIManager.getLookAndFeelDefaults().put("Button[Enabled].backgroundPainter", new ButtonPainter(Color.YELLOW, Color.RED));
UIManager.getLookAndFeelDefaults().put("Button[Focused].backgroundPainter", new ButtonPainter(Color.YELLOW, Color.RED));
System.out.println(UIManager.get("Button[Default+Focused].backgroundPainter"));
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridBagLayout());
frame.add(new JButton("First Button"));
frame.add(new JButton("Second Button"));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class ButtonPainter implements Painter {
private Color light, dark;
private GradientPaint gradPaint;
public ButtonPainter(Color light, Color dark) {
this.light = light;
this.dark = dark;
}
@Override
public void paint(Graphics2D g, Object c, int w, int h) {
System.out.println("...");
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
gradPaint = new GradientPaint((w / 2.0f), 0, light, (w / 2.0f), (h / 2.0f), dark, true);
g.setPaint(gradPaint);
g.fillRect(2, 2, (w - 5), (h - 5));
Color outline = new Color(0, 85, 0);
g.setColor(outline);
g.drawRect(2, 2, (w - 5), (h - 5));
Color trans = new Color(outline.getRed(), outline.getGreen(), outline.getBlue(), 100);
g.setColor(trans);
g.drawRect(1, 1, (w - 3), (h - 3));
}
}
}
这是一项全局更改,因此所有按钮都会受到此更改的影响。我相信有一种方法可以做到这一点,只有那些你想改变的控件才会受到影响,但你需要自己做更多的研究;)
关于java - 在 Nimbus LaF 中更改 JButton 的默认键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24504013/
例如,可能有不同的 LAF。 JPanel 及其所有子项? 我的程序的核心(全部在一个 JPanel 中)严重依赖于组件的高度和宽度(通过不同的 LAF 进行更改),因此必须有一个恒定的 LAF。其余
我自定义我的 JComboBox 如下。 该程序在默认 LAF 下运行正常,但是每当我将 LAF 更改为 System LAF(另一个 LAF,Nimbus 也可以)时,单击按钮后就会出现无限循环。我
我有一个用 Java 编写的应用程序。当我使用跨平台 LAF(金属)从 eclipse 运行它时UIManager.setLookAndFeel(UIManager.getCrossPlatformL
我正在 Netbeans 中构建一个 GUI,它在设计器中看起来不错,但当我运行该程序时,它看起来很垃圾。我使用的是 Mac,所以我觉得使用 Mac OS LAF 看起来会更好,但是当我在 Windo
在我编写的“Battleship”程序中,我包含了将程序的“外观和感觉”更改为 SystemDefault、“Metal”(Java 默认)或“Motif”(也包含在 Java 中)的可能性。如果您从
我正在使用 Netbeans IDE,并且我想在 Java 应用程序中使用 Insubstantial LAF (http://insubstantial.posterous.com/)。但是,我不知
我有一个带有两个 JPanel 的应用程序,它们必须具有不同的样式。我使用 Synth LaF,但我不知道如何在一个 xml 文件中拥有两种不同的样式。我定义了一种样式并将其绑定(bind)到“面板”
我们在带有Solaris的服务器上运行构建。将 jre 1.6 更改为 jre 1.7 后,运行所有测试的实用程序开始抛出异常(抱歉我的英语): [java] Exception in thread
我是 Java 的新手,我搜索了很多网络和 Java 文档,但我不明白如何将 JTatto LAF 集成到我的应用程序中。 我下载了 .jar 文件并将其保存到我的类(class)所在的同一文件夹中。
我有一个应用程序在几个地方使用禁用的 JTextFields,这些地方是透明的 - 允许显示背景而不是文本字段的正常背景。 当运行新的 Nimbus LAF 时,这些字段是不透明的(尽管设置了 set
当我使用 Nimbus 外观时,我在 addPropertyChangeListener 处收到 NullpointerException 。当我使用 Linux 标准 LAF(金属)时,一切工作正常
如何子类化 JTabbedPane 并为子类的每个实例提供与默认 LaF 不同的外观?我仍然想访问默认的 JTabbedPanel,因此简单地覆盖全局 LaF 不是一个选项。 谢谢。 最佳答案 您可以
使用 Synth LaF,我无法将 JLabel 的前景颜色设置为“禁用”状态。有人成功做到这一点吗?这是 LaF.xml 文件中标签的样式定义。
我想删除 LAF JCheckbox 周围的蓝色东西: 我该怎么做? 非常感谢 最佳答案 图标是 LAF 的一部分。 如果您不喜欢默认图标,那么您可以随时提供自己的图标: checkBox.setIc
如何从 Swing JComboBox 中删除 LAF 样式? 最佳答案 实际上您无法删除 LAF,因为那时不会呈现任何内容,但您可以仅为该组合框设置另一个 LAF。 像这样: combo.setUI
我正在通过动态更改 UIDefaults 来自定义 Swing 应用程序。最终目标是更改其中的许多内容(颜色、字体、大小、边框等)并根据每个用户保存结果。虽然它可能会给应用程序带来一些非标准的外观,但
我最近一直在尝试将系统转换为统一的外观和感觉(在本例中为 Nimbus)。然而,某些组件需要更改默认值,我不想仅仅因为单个组件而更改默认值。 我正在尝试覆盖 JTree 组件的行突出显示颜色。我已经设
我目前正在使用 swing 应用程序。对于开发人员来说,最重要的是用户必须熟悉 GUI。我想开发一个应用程序,它可以具有所有平台的 native (平台的默认)外观在计算机上使用的(我的意思是说我的应
最近我一直在使用 Nimbus Look and Feel 开发一个 Swing 项目。我想将 JOptionPane 中的所有按钮设置为具有相同的大小,但徒劳无功。 import javax.swi
我刚刚注意到,当我在第二个屏幕(没有任务栏)上最大化一个框架时,它最终会达到人们预期的边界(如果任务栏在那里)。 我刚刚注意到这一点已经切换到 Windows 7。以前在 Vista 中,我有一个实用
我是一名优秀的程序员,十分优秀!