У меня проблема, когда моя JPanel не обновляется должным образом с использованием repaint()
.JPanel не перерисовывается при вызове repaint() из производного класса
У меня есть основной класс GUI, который добавляет JPanel к кадру. Вот класс JPanel.
public class GUI extends JFrame {
...
setContentPane(new MazeMonkey());
...
}
Это мой класс JPanel.
public class MazeMonkey extends JPanel {
...
repaint(); // this works
...
public void paintComponent(Graphics g) {
super.paintComponent(g);
m.display(g); // redraw the maze
}
}
Если я переписываю этот класс, он отлично работает! Однако, если я вызываю перерисовку из класса, который расширяет MazeMonkey, это не так. Например,
public class TimeTrial extends MazeMonkey implements Runnable {
public void nextMaze() {
setBackground(Color.WHITE);
repaint(); // this does not work
revalidate();
}
}
Это не работает. Я добавил заявление println внутри paintComponent, чтобы проверить, вызвано ли оно вызовом, и оно есть. Однако он не обновляет панель! Может ли кто-нибудь помочь мне, пожалуйста?
Спасибо.
Прежде всего перепроверить() и repaint() не требуется, поскольку, когда вы изменяете свойство компонента (т.е. setBackground (...)), Swing будет ссылаться на эти методы для вас. 'если он вызван и он есть. '- тогда я бы сказал, что проблема в вашей логике m.display (...). – camickr
Опубликовать [SSCCE] (http://sscce.org/), демонстрируя проблему. Опять же, нам не нужно ваше настоящее приложение. Просто пример, имитирующий проблему. Таким образом, у вас есть рамка с панелью TimeTrial, которую вы добавляете в фрейм. В вашем опубликованном коде вы добавляете MazMonkey в фрейм, но нигде вы не добавляете TimeTrial к кадру. Коду рисования не нужно рисовать лабиринт, только сделать drawstring (...), чтобы доказать, что метод вызывается. Держите код простым. Легче отлаживать простой код. – camickr
Нам нужны ваши коды, чтобы помочь вам – ziLk