Как мне заставить paintComponent(Graphics g) вызывать? repaint() не будет работать каждый раз
Следующее в программе Java SE6, которая представляет собой игру Tic Tac Toe:
У меня есть класс MiniPanel
это расширяет JPanel
что у меня в сетке. Если пользователь щелкает один из них, слушатель делает что-то, а затем... в конце концов, он вызывает метод placeX() или placeO() на минипанели, по которой щелкнули. Это делает некоторые вещи, а затем распечатывает сообщение о том, что метод был вызван, и уже в следующей строке вызывается метод animatePanel(), который вызывает метод repaint() внутри, распечатывая сообщение прямо перед этим.
Класс MiniPanel
также переопределяет paintComponent(Graphics g)
с методом, который сначала выводит сообщение о том, что paintComponent был вызван, ТО делает super.paintComponent(g)
а затем делает другие вещи.
Проблема в том, что когда я нажимаю MiniPanel
, первые 2 сообщения о том, что placeX()
или же placeO()
и animatePanel() был вызван появляется, что означает, что repaint()
Должно быть, был вызван. Но paintComponent(Graphics g)
никогда не называется! Еще одна странная вещь, что это работает, если я позвоню placeX()
непосредственно когда MiniPanel
инициализируется, но не иначе.
у меня есть только paintComponent(Graphics g)
переопределено, больше ничего.
Вот краска компонент:
public void paintComponent(Graphics g){
if (Controller.DEBUG) System.out.println("MiniPanel at ("+row+", "+col+") received paintComponent (is repainting now).");
super.paintComponent(g);
...
...
}
placeX (placeO - одно и то же):
public void placeX(){
...
if (Controller.DEBUG) System.out.println("MiniPanel at ("+row+", "+col+") received placeX.");
...
animatePanel();
}
animatePanel:
private void animatePanel() {
if (Controller.DEBUG) System.out.println("MiniPanel at ("+row+", "+col+") doing animatePanel().");
timer.start();
}
Таймер вызывает это несколько раз для небольшой анимации:
private ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
if (Controller.DEBUG) System.out.println("MiniPanel at ("+row+", "+col+") doing actionPerformed().");
...
if (Controller.DEBUG) System.out.println("MiniPanel at ("+row+", "+col+") about to repaint... Should receive paintComponent command!");
repaint();
}
};