Hallo Forum!
Ich habe ein Problem in der Darstellung. Ich möchte ein JPanel auf ein Frame zeichnen. Ja ich weiß das ist auch ganz trivial und es ist nicht so, dass ich das nicht einmal hinbekommen hätte und durchaus schon länger im Netz gesucht habe. Um es mal verständlich zu machen, ganz einfach Beispiel.
Ich habe eine Klasse die von JPanel abgeleitet ist, darin überschreibe ich die paintComponent Methode eben so, wie ich mein Panel haben möchte, in etwa so:
Jetzt habe ich mir dazu ein kleines Testprogramm geschrieben um das Panel zu testen:
Und schau da, es wird gezeichnet und ist auf dem Frame sichtbar (ok, wo solls auch sonst sein)
So nun habe ich eine etwas größe Anwendung die nach dem MVC Konzept arbeitet. Jetzt findet eine Änderung im Modell statt und nachdem die public void update(...) Methode der View aufgerufen wurde soll nun praktisch das, was oben im Testprogramm gemacht wurde auch auf der View angezeigt werden.
Die View ist natürlich auch von JFrame abgeleitet und enthät noch ein Attribut mainPanel vom Typ JPanel, auf das ich nun etwas zeichnen möchte - genau das gleiche JPanel von oben, was im Beispiel funktioniert.
Das Ganze sieht dann grob so aus:
(die initPlayPanel() wird innerhalb der public void update(...) aufgerufen.)
So, aber ihr könnt euch schon denken, es wird eben nichts gezeichnet Ich bin jetzt mal hergegangen und habe mit Eclipse debuggt und schau mir das Attribut mainPanel an und schau da, es sind die entsprechenden myPanels alle darin zu finden. Folglich habe ich mir gedacht, liegt das Problem irgendwo am neuzeichnen, aber ich weiß nicht wo. Ich habe jetzt schon (ganz verzweifelt) überall mal ein repaint() und validate() für das Frame und auch für das mainPanel eingegeben aber ich stocher da jetzt irgendwie blind rum. Ich kann mir das gerade nicht wirklich erklären und mal fragen ob einer von euch eine Idee hat!
Thx
Fry
Ich habe ein Problem in der Darstellung. Ich möchte ein JPanel auf ein Frame zeichnen. Ja ich weiß das ist auch ganz trivial und es ist nicht so, dass ich das nicht einmal hinbekommen hätte und durchaus schon länger im Netz gesucht habe. Um es mal verständlich zu machen, ganz einfach Beispiel.
Ich habe eine Klasse die von JPanel abgeleitet ist, darin überschreibe ich die paintComponent Methode eben so, wie ich mein Panel haben möchte, in etwa so:
Code:
class myPanel extends JPanel() {
[...]
public void paintCOmponent(Graphics 2g){
// hier male ich dann das, was ich haben mlchte
}
[...]
}
Jetzt habe ich mir dazu ein kleines Testprogramm geschrieben um das Panel zu testen:
Code:
public class TestMain extends JFrame{
public static void main(String[] args) {
TestMain tm = new TestMain();
tm.setLayout(new GridLayout(2,2));
for(int i = 0; i < 4; i++)
{
tm.add(new myPanel ());
}
tm.setSize(300,300);
tm.setVisible(true);
}
}
Und schau da, es wird gezeichnet und ist auf dem Frame sichtbar (ok, wo solls auch sonst sein)
So nun habe ich eine etwas größe Anwendung die nach dem MVC Konzept arbeitet. Jetzt findet eine Änderung im Modell statt und nachdem die public void update(...) Methode der View aufgerufen wurde soll nun praktisch das, was oben im Testprogramm gemacht wurde auch auf der View angezeigt werden.
Die View ist natürlich auch von JFrame abgeleitet und enthät noch ein Attribut mainPanel vom Typ JPanel, auf das ich nun etwas zeichnen möchte - genau das gleiche JPanel von oben, was im Beispiel funktioniert.
Das Ganze sieht dann grob so aus:
Code:
private void initPlayPanel() {
[...]
mainPanel.removeAll();
mainPanel.setLayout(new GridLayout(yValue, xValue));
for (int i = 1; i < yValue + 1; i++) {
// inner loop
for (int j = 1; j < xValue + 1; j++) {
mainPanel.add(new myPanel());
}
}
mainPanel.repaint();
[...]
}
So, aber ihr könnt euch schon denken, es wird eben nichts gezeichnet Ich bin jetzt mal hergegangen und habe mit Eclipse debuggt und schau mir das Attribut mainPanel an und schau da, es sind die entsprechenden myPanels alle darin zu finden. Folglich habe ich mir gedacht, liegt das Problem irgendwo am neuzeichnen, aber ich weiß nicht wo. Ich habe jetzt schon (ganz verzweifelt) überall mal ein repaint() und validate() für das Frame und auch für das mainPanel eingegeben aber ich stocher da jetzt irgendwie blind rum. Ich kann mir das gerade nicht wirklich erklären und mal fragen ob einer von euch eine Idee hat!
Thx
Fry