如何使用Nimbus外观改变JPanels的背景颜色?

Jon*_*nas 4 java swing colors nimbus uimanager

我想为应用程序中的所有JPanel使用不同的背景颜色.使用Nimbus外观时我该怎么做?

我按照更改颜色主题来更改Nimbus外观中的组件颜色.

它有时只能随机工作.如果我PropertyChagneListener在更改颜色之前设置了一个,则只会通知一次.

这是一些测试代码:

public class RedPanels extends JFrame {

  public RedPanels() {
    JPanel panel = new JPanel();
    add(panel);
    setPreferredSize(new Dimension(100, 100));
    pack();
    setVisible(true);
  }

  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

      @Override
      public void run() {

        try {
          for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                UIManager.setLookAndFeel(info.getClassName());
                UIManager.getDefaults().addPropertyChangeListener(
                                               new PropertyChangeListener() {

                  @Override
                  public void propertyChange(PropertyChangeEvent event) {
                    if (event.getPropertyName().equals("Panel.background")) {
                      System.out.println("color changed");
                    }

                });
                UIManager.put("Panel.background", new Color(255,0,0));
                break;
            }
          }
        } catch (Exception e) {
            // Nimbus is not available.
        }
        new RedPanels();
        }
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

Igo*_*din 6

UIManager.getLookAndFeelDefaults().put("Panel.background", Color.RED);
Run Code Online (Sandbox Code Playgroud)