簡體   English   中英

java swing-如何更改窗口背景

[英]java swing - how to change window background

我試圖創建一個將窗口背景從默認切換為紅色的按鈕。 我沒有找到任何與默認顏色匹配的預設顏色,因此在創建它時嘗試從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);
            }
        }
    });

要比較的Color ,這是一個Object那么equals()的方式...也是if期望一個boolean ,並會結束時; 找到了,所以這樣:

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

一定是

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

if(panel.getBackground(c));{不正確,它甚至不會編譯。 應該是if (c.equals(panel.getBackground()) {

注意,缺少; 在聲明的末尾。

另外,沒有諸如getBackground(Color)這樣的方法,因此,與else語句一起,您的代碼基本上不會編譯。

不要使用null布局,您不能控制UI的各個方面,這些方面會改變組件在不同系統上的大小或外觀設置

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

    }

  }

檢查當前顏色的一種替代方法是使用一個簡單的計數器,這可能會在某些系統/外觀上引起某些問題,...

public class TestPane extends JPanel {

  private int tick;

  public TestPane() {
    setLayout(new GridBagLayout());

    JButton btn = new JButton("Click");
    btn.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        tick++;
        if ((tick % 2) != 0) {
          setBackground(Color.RED);
        } else {
          setBackground(null);
        }
      }
    });

    add(btn);
  }

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

}

這將使您能夠獨立於當前顏色翻轉狀態,這通常會更安全

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM