簡體   English   中英

JLabel不會兩次更改顏色

[英]JLabel wont change color twice

我有以下代碼:

   public class Test extends JFrame implements ActionListener{
 private static final Color TRANSP_WHITE = new Color(new Float(1), new Float(1), new Float(1), new Float(0.5)); 
 private static final Color TRANSP_RED = new Color(new Float(1), new Float(0), new Float(0), new Float(0.1));
 private static final Color[] COLORS = new Color[]{ TRANSP_RED, TRANSP_WHITE};
 private int index = 0;

 private JLabel label;
 private JButton button; 
 public Test(){
  super();

  setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
  label = new JLabel("hello world");
  label.setOpaque(true);
  label.setBackground(TRANSP_WHITE);

  getContentPane().add(label);

  button = new JButton("Click Me");
  button.addActionListener(this);

  getContentPane().add(button);

  pack();
  setVisible(true);
 }

 @Override
 public void actionPerformed(ActionEvent e) {
  if(e.getSource().equals(button)){
   label.setBackground(COLORS[index % (COLORS.length - 1)]);
index++;
      }
     }

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

當我運行它時,我得到帶有TRANSP_WHITE背景的標簽,然后當我單擊按鈕時,該顏色變為TRANSP_RED但是當我再次單擊它時,我看到顏色沒有變化。 有人知道為什么嗎?

謝謝

好吧,您期望發生什么?

label.setBackground(COLORS[index % (COLORS.length - 1)]);

index變量被硬編碼為0。COLORS.length-1本質上是一個常數。 因此,每次單擊將背景設置為COLORS [0]時;

如果將操作方法​​更改為以下內容,則會得到所需的結果:

 @Override
 public void actionPerformed(ActionEvent e) {
  if(e.getSource().equals(button)){
   label.setBackground(COLORS[index % COLORS.length]);
   index++;
  }
 }

第一:模運算符將始終返回一個比傳遞給它的值小0到一個之間的值。 所以

index % COLORS.length

將始終返回介於0和COLORS.length -1之間的值。

第二:您忘記了在每次調用后增加索引。

嘿! 您忘記增加索引。 在此表達式中:

label.setBackground(COLORS[index % (COLORS.length - 1)]);

index % (COLORS.length - 1)始終為0。

順便說一句。 創建Color時不必使用new Float(1) 1F應該工作。

這是您必須使用的代碼

label.setBackground(COLORS[index % (COLORS.length)]);
index++;

你做錯了。 應該那樣做

label = new JLabel("hello world"){
     public void paintComponent(Graphics g)
     {
         //draw background
         Color old=g.getColor();
         g.setColor(getBackground());
         g.fillRect(0,0,getWidth(),getHeight());
         g.setColor(old);
         super.paintComponent(g);
     }
};
label.setOpaque(false); // your component is not opaque!

暫無
暫無

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

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