[英]how to change Java Swing Nimbus button text foreground color back and forth?
[英]Swing change foreground color of BasicArrowButton
在JSpinner
类中,如何更改两个BasicArrowButton
(向上和向下)组件的前景色?
component.setForeground(<<a_color>>)
不起作用。
提前致谢。
编辑
private void set_colors(JSpinner spinner){
int n = spinner.getComponentCount();
for (int i=0; i<n; i++)
{
Component c = spinner.getComponent(i);
System.out.println(c);
if (c instanceof BasicArrowButton)
{
c.setForeground(ds_conn_text.getForeground());//doesn't work, doesn't change arrow color
c.setBackground(ds_conn_text.getBackground());
BasicArrowButton c0=(BasicArrowButton) c;c0.setBorder(ok_button.getBorder());
}
}
}
这是Swing改变JSpinner背面和前面颜色的后续问题
不能仅覆盖paint
方法而不能设置箭头的颜色。 原因很简单,箭头的颜色与用于按钮“阴影”的颜色相同。 所以你可以放线
UIManager.getDefaults().put("controlDkShadow", Color.MAGENTA);
进入你的main
,但这不仅会改变箭头颜色,还会改变其他元素的颜色,这些颜色实际上不应该改变。
仅为特定实例设置此颜色的丑陋/ hacky方式将是
private static void hackilySetColor(JSpinner spinner, Color color)
{
int n = spinner.getComponentCount();
for (int i=0; i<n; i++)
{
Component c = spinner.getComponent(i);
if (c instanceof BasicArrowButton)
{
try
{
Field field = BasicArrowButton.class.getDeclaredField("darkShadow");
field.setAccessible(true);
field.set(c, color);
field.setAccessible(false);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
但这使用反射,实际上是一个丑陋的黑客 ,仍然取代按钮的“暗影”边框的颜色。
对于像这样的事情,你最好使用自己的UI(或者......根本不要改变颜色 - 无论如何这对我来说似乎毫无用处......)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.