java swing - 如何更改窗口背景

时间:2015-05-29 11:29:16

标签: java swing jpanel jbutton

我试图制作一个按钮,将窗口背景从默认切换为红色。 我还没有找到任何预设颜色来匹配默认颜色,所以当我创建它时,我试图从panel.getBackground获取它。我在line 11时出错,我不知道如何检查当前的背景颜色。

JPanel panel = new JPanel();
    panel.setBounds(0, 0, 434, 262);
    frame.getContentPane().add(panel);
    panel.setLayout(null);
    panel.setVisible(true);
    Color c=panel.getBackground();

    JButton btnRed = new JButton("Red");
    btnRed.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(panel.getBackground(c));{
                panel.setBackground(Color.RED);
            }
            else{
                panel.setBackground(c);
            }
        }
    });

2 个答案:

答案 0 :(得分:2)

您想要比较Color,这是Object因此equals()就是这样......也是if期望boolean并且会{找到;后完成,所以:

if(panel.getBackground(c));{
// ↑ not a boolean        ↑
//                        ↑
//                        ; is wrong

必须是

if(panel.getBackground().equals(c)){

答案 1 :(得分:2)

subprocess.Popen(['py3','setup.py'], cwd='path-of-my-setup') 不正确,甚至不会编译。它应该是if(panel.getBackground(c));{

请注意,声明末尾缺少if (c.equals(panel.getBackground()) {

此外,没有;这样的方法,因此,与getBackground(Color)语句一起,您的代码基本上不会编译。

不要使用else布局,您不能控制UI的各个方面,这些方面将改变不同系统上所需组件的大小或外观设置

null

检查当前颜色的替代方法,可能会导致某些系统/外观上的某些问题,使用简单的计数器......

  import java.awt.Color;
  import java.awt.Dimension;
  import java.awt.EventQueue;
  import java.awt.GridBagLayout;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JPanel;
  import javax.swing.UIManager;
  import javax.swing.UnsupportedLookAndFeelException;

  public class Test {

    public static void main(String[] args) {
      new Test();
    }

    public Test() {
      EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
          try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
          } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
            ex.printStackTrace();
          }

          JFrame frame = new JFrame("Testing");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setContentPane(new TestPane());
          frame.pack();
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
        }
      });
    }

    public class TestPane extends JPanel {

      private Color baseColor;

      public TestPane() {
        baseColor = getBackground();
        setLayout(new GridBagLayout());

        JButton btn = new JButton("Click");
        btn.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            if (baseColor.equals(getBackground())) {
              setBackground(Color.RED);
            } else {
              setBackground(baseColor);
            }
          }
        });

        add(btn);
      }

      @Override
      public Dimension getPreferredSize() {
        return new Dimension(200, 200);
      }

    }

  }

这将允许您独立于当前通常更安全的颜色翻转状态