Java 如何使用Nimbus LookAndFeel更改JToolTip的背景色?
在使用Nimbus LookAndFeel的基于Swing的Java应用程序中,我尝试设置工具提示的背景色。因此,我创建了JToolTip的一个子类,并通过重写createToolTip()在我的组件中使用它。目前一切正常,工具提示显示正确,但背景色不变。前景颜色按预期设置。 将外观更改为金属时,我可以按预期设置颜色 这里是一个能够在金属和光环之间切换的小例子。正如yopu希望看到的那样,按钮工具提示的背景色只在使用金属时设置Java 如何使用Nimbus LookAndFeel更改JToolTip的背景色?,java,swing,Java,Swing,在使用Nimbus LookAndFeel的基于Swing的Java应用程序中,我尝试设置工具提示的背景色。因此,我创建了JToolTip的一个子类,并通过重写createToolTip()在我的组件中使用它。目前一切正常,工具提示显示正确,但背景色不变。前景颜色按预期设置。 将外观更改为金属时,我可以按预期设置颜色 这里是一个能够在金属和光环之间切换的小例子。正如yopu希望看到的那样,按钮工具提示的背景色只在使用金属时设置 import java.awt.Color; import java
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JToolTip;
public class TooltipTestApp {
private static final String METAL_LOOK_AND_FEEL = "javax.swing.plaf.metal.MetalLookAndFeel";
private static final String NIMBUS_LOOK_AND_FEEL = "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel";
private static JButton button;
private static String usedLookAndFeel = NIMBUS_LOOK_AND_FEEL;
public static void main(String args[]) {
button = new JButton() {
@Override
public JToolTip createToolTip() {
JToolTip toolTip = super.createToolTip();
toolTip.setBackground(Color.BLACK);
toolTip.setForeground(Color.RED);
return toolTip;
}
};
button.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) {
TooltipTestApp.toggleLookAndFeel();
}
});
button.setToolTipText("Some text");
JFrame frame = new JFrame("TooltipTestApp");
TooltipTestApp.toggleLookAndFeel();
frame.add(button);
frame.setSize(450, 100);
frame.setVisible(true);
}
private static void toggleLookAndFeel() {
try {
if (usedLookAndFeel.equals(METAL_LOOK_AND_FEEL)) {
usedLookAndFeel = NIMBUS_LOOK_AND_FEEL;
} else {
usedLookAndFeel = METAL_LOOK_AND_FEEL;
}
UIManager.setLookAndFeel(usedLookAndFeel);
String lookAndFeelName = usedLookAndFeel.substring(usedLookAndFeel.lastIndexOf(".") + 1);
button.setText("This is: " + lookAndFeelName);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
试试这个:
public class Main {
public static void main(String args[]) {
JFrame frame = new JFrame("JToolTip Sample");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton b1 = new JButton("Button 1") {
public JToolTip createToolTip() {
JToolTip tip = super.createToolTip();
tip.setForeground(Color.YELLOW);
tip.setBackground(Color.RED);
tip.setFont(new Font("Arial", Font.BOLD,36));
return tip;
}
};
b1.setToolTipText("HELLO");
frame.add(b1, BorderLayout.NORTH);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
来源:以下内容也适用于金属LAF,无需重写createToolTip()方法:
LAF可以选择是否使用UIManager属性。我不知道这是否适用于Nimbus。作为提示:使用的LookAndFeel是Nimbus。当改变这一点时,我可以设置背景色。因此,最好的问题是“当使用Nimbus LookAndFeel时如何更改JToolTip的背景色?”“有什么想法吗?”要更快地获得更好的帮助,请发布一篇文章。要获得“额外点数”(或至少更多帮助),请使GUI有一个按钮可以在金属和光环格子之间切换。@AndrewThomson:谢谢!我更改了示例。3条注释。1) SSCCE应包括进口。2) Re异常
//此处不应发生
a)异常适用于异常情况。b) 运行1.6.0_09的客户端将触发该异常。c) ex.printStackTrace()
不仅比注释短,而且更有用。3) 我不知道如何解决这个问题。我让位给Swing专家,希望他们很快就会发生。更改示例:添加导入和添加异常处理此代码不会更改工具提示的背景色。你可以用一个简单的挫折来增加它,但这在Nimbus L&F中不起作用。@pmule:你试过吗?@trashgood:我看不到任何效果,也不确定我是否做对了。我尝试了Color-derivedColor=nimbusLaf.getDerivedColor(“textForeground”,1,1,1,true)代码>并通过工具提示指定此颜色。设置背景(derivedColor)代码>对于绘制工具提示,Nimbus使用最终类型“ToolTipPaint”的实例,并硬编码使用Nimbus默认值“info”。所以我有两个选择。1.使用UIManager.put(“info”,Color.BLACK)全局更改默认的“info”值代码>2。通过使用UIDefaults=newuidefaults()设置自己的画师来覆盖UIDefaults
;defaults.put(“工具提示[Enabled].backgroundPainter”,新的MyToolTipPaint());toolTip.putClientProperty(“Nimbus.Overrides”,默认值)代码>
UIManager.put("ToolTip.background", Color.RED);