web-dev-qa-db-ja.com

JPanelを描いた後、どのように塗り直しますか?

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();
}
9
Aerozeek

somePanel.revalidate()を呼び出してみてください。これにより、コンポーネントツリーが変更されたことがAWTに通知されます。

編集:invalidateからrevalidateに変更されました

18
Cameron Skinner