Wie repaint ein JPanel nach sich gezogen haben, auf Sie?
Habe ich eine Komponente erbt von JPanel, ich zeichne ein Gitter drauf. Jetzt habe ich eine JComboBox, und ich möchte die Benutzer werden in der Lage, wählen Sie die raster-Größe und drücken Sie dann die a-Taste, um das raster ändern (repaint grid).
Die Sache ist, dass es Farben die erste Netz, aber sobald der Benutzer wählt eine Rastergröße von der JComboBox und auf den button klickt, passiert nichts. Ich habe zu minimieren, die form und dann wiederherstellen, um die änderungen zu sehen.
Irgendwelche Ideen? Der Code ist unten.
Der Komponente:
public class Board extends JPanel {
...
protected void paintComponent(Graphics og) {
super.paintComponent(og);
...
}
}
}
Main-Klasse
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();
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie anrufen
somePanel.revalidate()
. Das wird sagen, die AWT, die Sie geändert haben die Komponentenstruktur.EDIT: Geändert von
invalidate
zurevalidate
someButtonActionPerformed
Methode tatsächlich aufgerufen wird? Haben Sie einenSystem.out.println
zu überprüfen?revalidate
). Ist es mehr relevanten code, den du posten könntest? Vielleicht gibt es etwas anderes passiert.revalidate
in meiner Antwort, nichtinvalidate
. Das könnte das problem sein.invalidate
,validate
undrevalidate
wenn Sie nicht bereits getan haben. Sie kann schwierig sein, um richtig zu machen.