获取JButton问题的背景颜色

时间:2014-04-23 13:23:27

标签: java swing jbutton

我是这堂课:

public class Gemme extends JButton implements ActionListener{

    private static int indicateur=0;
    private Gemme gemme1;
    private Gemme gemme2;

    @Override
    public void actionPerformed(ActionEvent e) {
        indicateur = 1-indicateur;

        if(this.indicateur==1)//first click
        {
            this.gemme1 = (Gemme) e.getSource();

        }
        else
        {
            this.gemme2 = (Gemme) e.getSource();
            switchColor();
        }

    }

    private void switchColor()
    {
       Color c = gemme1.getBackground();
       gemme1.setBackground(gemme2.getBackground());
       gemme1.setBackground(c);
       System.out.println("color switched");
    }

基本上我创造了一个游戏: 当玩家尝试点击两个JB以便在它们之间切换颜色时,有色JButton的网格。

我在这条线上获得NPE的问题:

Color c = gemme1.getBackground();

但是当我把Color c = gemme1.getBackground();放在actionPerformed中时:

 public void actionPerformed(ActionEvent e) {
            indicateur = 1-indicateur;

            if(this.indicateur==1)//first click
            {
                this.gemme1 = (Gemme) e.getSource();
                Color c = gemme1.getBackground();

            }
            else
            {
                this.gemme2 = (Gemme) e.getSource();
                //switchColor();
            }

        }

它有效,我不明白,当动作与它不匹配时,JB是否正在失去他的属性?

请问有什么解释吗?

修改 我将switchColor()更改为:

   private void switchColor()
    {
        System.out.println(gemme1);
        System.out.println(gemme2);
    }

输出:

null
mini.projet.dev.game.components.Gemme[btn42,104,216,51x53,alignmentX=0.0,alignmentY=0.5,b...........

gemme1如何变为空?

2 个答案:

答案 0 :(得分:0)

我解决了这个问题,它只是将gemme 1 / gemme 2更改为静态,以便在其他Gemme实例之间共享:

private static Gemme gemme1;
private static Gemme gemme2;

答案 1 :(得分:0)

if(this.indicateur==1)//first click
{
    this.gemme1 = (Gemme) e.getSource();

}
else
{
    this.gemme2 = (Gemme) e.getSource();
    switchColor();
}

在此代码中,您只是初始化gemme2成员。当您在switchColor()区块中致电else时,gemme1仍然未定义,例如空值。这就是gemme1.getBackground();来电期间获得NPE的原因。