java - 如何使用 Nimbus L&F 更改 JSeparator 的颜色

标签 java swing nimbus jseparator

这是我尝试根据 How to change the color of a JSeparator? 中的答案将垂直 JSeparator 的颜色从 Nimbus 默认黑色更改为红色的尝试。 :

public class TestFrame extends JFrame {

    public static void main(String[] args) {

        TestFrame frame = new TestFrame();
        frame.setSize(200, 200);
        frame.setLayout(new GridBagLayout());

        for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                try {
                    UIManager.setLookAndFeel(info.getClassName());
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(TestFrame.class.getName()).log(Level.SEVERE, null, ex);
                } catch (InstantiationException ex) {
                    Logger.getLogger(TestFrame.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(TestFrame.class.getName()).log(Level.SEVERE, null, ex);
                } catch (UnsupportedLookAndFeelException ex) {
                    Logger.getLogger(TestFrame.class.getName()).log(Level.SEVERE, null, ex);
                }
                break;
            }
        }
        UIManager.put("Separator.background", Color.red);
        UIManager.put("Separator.foreground", Color.red);

        JSeparator separator = new JSeparator(JSeparator.VERTICAL);
        separator.setPreferredSize(new Dimension(2, 100));
        separator.setForeground(Color.red);
        separator.setBackground(Color.red);

        frame.add(separator, new GridBagConstraints());
        frame.setVisible(true);

    }

}

但是垂直分隔符仍然是黑色的。我应该做什么?

注意:我知道 Nimbus 是问题所在,因为我尝试不将 L&F 设置为 Nimbus,并且效果很好。另请注意,设置 Separator[Enabled].backgroundPainter 属性似乎影响了 JSeperator 但不是我想要的方式(只是更改了背景颜色与分隔线颜色)

最佳答案

我通过更改 nimbusBlueGrey 解决了这个问题Nimbus 用于派生其他颜色的颜色。将分隔符设置为不透明只会有助于更改背景颜色,但 JSeperator's有两种颜色,前景色和背景色,因此设置为不透明并更改背景颜色解决了一半的问题。 nimbusBlueGrey似乎可以处理前景色,这似乎不能用 setForegroundcolor() 覆盖。或Separator.foreground属性。

问题是改变 nimbusBlueGrey会影响许多其他成分的颜色。我不确定如何将颜色更改仅包含在 JSeperator 中。

关于java - 如何使用 Nimbus L&F 更改 JSeparator 的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39046371/

相关文章:

java - Swing 中模态对话框的正确父级

java - 在 Mac 上启动时,Swing GUI 不显示或显示错误

java - 有什么方法可以使图像适合选项卡组件

java - 我正在尝试从 word 文件中读取。我不知道我错过了哪个 jar 文件 :

java - 在诊断 Swing 中 alt-tab 上的绘画问题时需要帮助

java - 使用 hamcrest contains() 方法比较两个集合

java - 我正在从数据库读取数据到具有自定义 AbstractTableModel 的 jtable

scala - 使用Nimbus和Scala的Table Cell渲染器

java - 使用 PowerMock 模拟时避免 javax/ejb/EJBLocalObject 异常

java - gwt VerticalPanel foreach