2015-11-05 5 views
0

Как изменить цвет JPanel с помощью события щелчка мыши?Изменить цвет JPanel с помощью мыши-мыши

public class Board extends JPanel{ 

    public Board() { 
     setLayout(new GridLayout(8, 8)); 
     setBackground(Color.white); 
     setPreferredSize(new Dimension(700, 700)); 

     JPanel[][] squares = new JPanel[8][8]; 

     for(int i = 0; i < squares.length; i++) { 
      for(int j = 0; j < squares[i].length; j++) { 
       squares[i][j] = new JPanel(); 
       add(squares[i][j]); 
       squares[i][j].addMouseListener(new MouseAdapter() { 
        @Override 
        public void mouseClicked(MouseEvent click) { 
        } 
       }); 
       if(click.getsource() == squares[i][j]) { 
        squares[i][j].setBackground(Color.blue); 
       } 
       if((i+j)%2 == 0) 
        squares[i][j].setBackground(Color.white); 
       else 
        squares[i][j].setBackground(Color.black); 
      } 
     } 
    } 
} 

ответ

1

Вы должны переместить если заявление внутри метода mouseClicked, что-то вроде этого:

final int iCopy = i; 
final int jCopy = j; 
@Override 
public void mouseClicked(MouseEvent click) { 
    if ((iCopy+jCopy)%2==0) { 
     squares[iCopy][jCopy].setBackground(Color.white); 
    } else { 
     squares[iCopy][jCopy].setBackground(Color.black); 
    } 
} 

Кроме того, я хотел бы предложить всегда использовать {}, если заявления. В противном случае ваш код может пострадать от неожиданных ошибок, так как:

if (true) 
    a += 1; 
    b += 2; 

такого же, как

if (true) { 
    a += 1; 
} 
b += 2; 

, который, безусловно, не то, что вы ожидали!

+0

Я согласен с битом фигур, но поскольку 'MouseAdapter' является анонимным внутренним классом, не должны ли быть' i' и 'j' окончательными? – CarefreeCrayon

+0

Да, правда, я изменил его –

+0

Если этот ответ был вам полезен, отметьте его как правильно –

Смежные вопросы