簡體   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