Как перекрасить JPanel после того, как нарисовали на нем? - PullRequest
8 голосов
/ 09 декабря 2010

У меня есть компонент, который наследуется от JPanel, я рисую на нем сетку. Теперь у меня есть JComboBox, и я хочу, чтобы пользователь мог здесь выбрать размер сетки, а затем нажать кнопку, чтобы изменить сетку (перекрасить сетку).

Дело в том, что он рисует начальную сетку, но как только пользователь выбирает размер сетки из JComboBox и нажимает кнопку, ничего не происходит. Я должен свернуть форму и затем восстановить ее, чтобы увидеть изменения.

Есть идеи? Код ниже.

Компонент:

public class Board extends JPanel {
    ...

    protected void paintComponent(Graphics og) {
        super.paintComponent(og);
        ...
        }
    }    
}

Основной класс

public class Main extends javax.swing.JFrame {
...

public Main() {                                   //This works great.
    board = new Board( ... );
    somePanel.add(board, BorderLayout.CENTER);

}

public void someButtonActionPerformed(Event e) { //This is not working

    somePanel.remove(board);
    board = new Board( ... );
    somePanel.add(board);
    somePanel.invalidate()
    board.repaint();
}

1 Ответ

16 голосов
/ 09 декабря 2010

Попробуйте позвонить somePanel.revalidate().Это сообщит AWT, что вы изменили дерево компонентов.

EDIT: изменено с invalidate на revalidate

...