Java 如何在单击jlabel后保留其新背景色,并使其在第二次单击时返回默认值?

Java 如何在单击jlabel后保留其新背景色,并使其在第二次单击时返回默认值?,java,swing,Java,Swing,我希望我的jLabel组件在单击时具有不同的背景颜色。实际上,我已经为背景颜色编写了代码来更改,但我需要它在单击后保留新颜色,并在第二次单击时返回默认值。我需要帮助 private void jLabel1MouseEntered(java.awt.event.MouseEvent evt) { jLabel1.setOpaque(true); jLabel1.setBackground(Color.orange); } private void jLabel1Mouse

我希望我的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);
} 

您应该将命令放入
鼠标单击或按下事件中
您需要将
JLable setOpaque
设置为
true
,否则不会绘制背景,因为
opaque
对于
JLabel
的默认值为
false

i、 e


您应该将命令放入
鼠标单击或按下事件中
您需要将
JLable setOpaque
设置为
true
,否则不会绘制背景,因为
opaque
对于
JLabel
的默认值为
false

i、 e


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

boolean isClicked = false;
然后在动作监听器中,检查它的值,更新标签,然后使其与原来相反

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

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

boolean isClicked = false;
然后在动作监听器中,检查它的值,更新标签,然后使其与原来相反

if(isClicked)
{
    label.setBackground(Color.BLUE);
    isClicked = false;
}
else
{
    label.setBackground(Color.GRAY);
    isClicked = true;
}
如何在单击jlabel后保留其新背景色,并使其在第二次单击时返回默认值

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

在本例中,我使用了两个变量来保留颜色
oldColor
newColor

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或任何其他合适的数据结构

如何在单击jlabel后保留其新背景色,并使其在第二次单击时返回默认值

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

在本例中,我使用了两个变量来保留颜色
oldColor
newColor

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或任何其他合适的数据结构。

谢谢。事实上我已经做到了。它正在工作,但背景色没有保留。我需要它,这样在第一次点击后,背景颜色会改变,并保持不变,在第二次点击时,它会返回默认值。我想这可以在ActionPerformed活动中完成。谢谢。事实上我已经做到了。它正在工作,但背景色没有保留。我需要它,这样在第一次点击后,背景颜色会改变,并保持不变,在第二次点击时,它会返回默认值。我认为这可以在ActionPerformed活动中实现。