Получение цвета фона проблемы JButton

1

У меня этот класс:

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");
    }

В основном я создаю игру: сетка цветных JButtons, когда игрок пытается нажать на два JB, чтобы переключить цвет между ними.

Проблема в том, что я получаю 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 теряет свои свойства, когда действие не соответствует ему?

Любые объяснения, пожалуйста?

EDIT Я изменил 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 становится нулевым?

Теги:
swing
jbutton

2 ответа

0

Я решил проблему, это просто изменило gemme1/gemme2 на статичный, чтобы стать общим для других экземпляров Gemme:

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

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

В этом коде вы инициализируете gemme2 член gemme2. Когда вы вызываете switchColor() в блоке else, gemme1 остается неопределенным, например, null. Вот почему вы получаете NPE во время gemme1.getBackground(); вызов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню