【问题标题】:Swing change foreground color of BasicArrowButton摆动改变 BasicArrowButton 的前景色
【发布时间】:2014-03-02 18:07:43
【问题描述】:

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());
        }
    }
}

【问题讨论】:

    标签: java swing custom-component jspinner uimanager


    【解决方案1】:

    这是Swing change the JSpinner back and fore colors的后续问题

    不可能设置箭头的颜色而不覆盖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();
                }
            }
        }
    }
    

    但这使用了反射,确实是一个丑陋的hack,并且仍然替换了按钮“暗影”边框的颜色。

    你最好用自己的 UI 来处理这样的事情(或者......根本不改变颜色 - 无论如何这对我来说似乎没什么用......)

    【讨论】:

    • 完美,完美。谢谢亲爱的。
    • 根本不改变颜色 == 使用适当的 L&F
    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 2020-07-28
    • 2018-02-14
    • 2020-05-13
    • 2013-07-06
    • 2019-05-13
    • 2013-09-03
    • 2018-02-13
    相关资源
    最近更新 更多