我有以下代码:
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/