Java JLabel着色和透明化

Java JLabel着色和透明化,java,swing,colors,jlabel,Java,Swing,Colors,Jlabel,当我点击标签时,我正试图将其着色并使其透明 int leftP=4; //initialized at start of code if (leftP>0){ if (lbl.getBackground()!=Color.YELLOW){ lbl.setBackground(Color.yellow); lbl.setOpaque(true); leftP--; }else{

当我点击标签时,我正试图将其着色并使其透明

int leftP=4;      //initialized at start of code
if (leftP>0){
        if (lbl.getBackground()!=Color.YELLOW){
            lbl.setBackground(Color.yellow);
            lbl.setOpaque(true);
            leftP--;
        }else{
            lbl.setOpaque(false);
            lbl.repaint();
            leftP++;
        }
}
这里的问题是当
leftP>0
if检查标签的背景是否已经是黄色时。如果是。。。它会给它脱色,但如果不是,它会给它上色。 这是第一次奏效

  • 我点击标签,它变为黄色,
    leftP=3
  • 我重新点击标签,它将变为没有黄色作为背景,并且
    leftP=4
  • 当我第三次单击时。我希望它会随着
    leftP=3
    变成黄色。。。但不幸的是,我不明白为什么它仍然没有颜色,每当我点击标签时,它就会继续进入
    ELSE
    循环
  • set不透明()不会更改背景色,因此它仍然是黄色

    试一试


    或者最好使用另一个标记,例如您自己的变量。

    添加try-catch语句,并在每次颜色更改后使用lbl.repaint()重新绘制标签


    作为旁白。使用带有一个彩色(默认)和一个透明(选定)图标的
    jLoggleButton
    。容易得多……例如。
    lbl.setOpaque(false);
    lbl.setBackground(Color.BLACK);
    
    try{
        int leftP=4;      //initialized at start of code
        if (leftP>0){
            if (lbl.getBackground()!=Color.YELLOW){
                lbl.setBackground(Color.yellow);
                lbl.setOpaque(true);
                lbl.repaint();
                leftP--;
            }else{
                lbl.setOpaque(false);
                lbl.repaint();
                leftP++;
            }
        }
    }catch(Exception ee){
    ee.printStackTrace();
    }