java - JLabel 不会改变颜色两次

标签 java user-interface swing colors jlabel

我有以下代码:

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

索引变量被硬编码为 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 和比传递给它的值小 1 之间的值。所以

index % COLORS.length

将始终返回 0 到 COLORS.length -1 之间的值。

第二:您忘记在每次调用后增加索引。

关于java - JLabel 不会改变颜色两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2487203/

相关文章:

java - dockerize java 应用程序的方法

java - 一个 .put 中包含多个 JsonObject

java - 无法使用 Cloud Firestore 写入多个位置

java - 如何安装SQLite JDBC驱动程序?

Java GUI - 定位

c++ - 在 xp 中将 Cuda 与基于表单的 GUI 结合使用

java - 通过图形类时遇到问题

user-interface - Maveryx、FitNesse、Robot 在 Mac、Windows 和 Linux 上进行桌面 GUI 测试

java - 如何制作简单平面样式的JButton?

java - 即使在 JPanel 中,JTable 也会在新窗口中打开?