繁体   English   中英

单击后如何保留jlabel的新背景颜色,并在第二次单击时恢复默认值?

[英]How do I retain the new background colour of a jlabel after it has been clicked and to make it go back to default on a second click?

我希望我的jLabel组件在单击时具有不同的背景颜色。 我实际上已经编写了用于更改背景颜色的代码,但是我需要它在单击后保留新的颜色,并在第二次单击时返回默认值。 我需要帮助。

private void jLabel1MouseEntered(java.awt.event.MouseEvent evt) { 
    jLabel1.setOpaque(true); 
    jLabel1.setBackground(Color.orange); 
} 
private void jLabel1MouseExited(java.awt.event.MouseEvent evt) { 
    jLabel1.setBackground(Color.white); 
    jLabel1.setOpaque(false); 
} 
private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {
    jLabel1.setBackground(Color.green);
} 

您应该将命令放在Mouse Clicked or pressed event并且需要将JLable setOpaque设置为true否则不会绘制背景,因为对于JLabelopaque的默认值为false

  private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {                                     
        jLabel1.setOpaque(true);
        jLabel1.setBackground(Color.red);

    } 

您应该创建一个存储按钮状态的布尔值

boolean isClicked = false;

然后在动作侦听器中,检查其值,更新标签,然后使其与原先相反

if(isClicked)
{
    label.setBackground(Color.BLUE);
    isClicked = false;
}
else
{
    label.setBackground(Color.GRAY);
    isClicked = true;
}

单击后如何保留jlabel的新背景颜色,并在第二次单击时恢复默认值?

有很多方法可以做到,但最终的概念是相似的。 您只需要在变量中保留新背景色的记录。

在这种情况下,我使用2个变量来保留颜色oldColornewColor

class MainPanel extends JPanel{  //Not necessary must be a JPanel. For e.g. only

    private Color oldColor;
    private Color newColor;
    private JLabel lbl;
    private JButton btn;

    //Constructors, initializations, getters, setters not shown

    public void init(){
        lbl.setOpaque(true);
        btn = new JButton("Click to switch color");
        btn.addActionListener(new ButtonHandler());
        oldColor = lbl.getBackground();  //can be any color you want
        newColor = Color.GREEN;          //can be any color you want
    }

    private class ButtonHandler implements ActionListener{
        @Override
        public void actionPerformed(ActionEvet e){
            if(lbl.getBackground().equals(oldColor))
                lbl.setBackground(newColor);
            else
                lbl.setBackground(oldColor);
        }
    }        
}

如果您有更多颜色,则可以始终使用数组,ArrayList或任何其他合适的数据结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM