Java Netbeans GUI dynamisches JPanel

nightmarevs

Cadet 4th Year
Registriert
Feb. 2009
Beiträge
102
Hallo,
ich habe schon lange nicht mehr mit java gearbeitet und bin gerade wieder an einem Projekt deshalb bin ich etwas eingerostet und komme bei folgendem Problem nicht weiter:
Ich habe ein JPanel dessen Inhalt Variabel ist, dafür habe ich eine Methode geschrieben die ein fertiges JPanel ausgibt, die funktioniert auch soweit nur wenn ich den GUI builder von Netbeans nehme dort ein JPanel einfüge und dann als custome code für die initialisierung "JPanel1 = meinPanel()" eingebe funktioniert das nicht es kommt nur das leere JPanel, wenn ich es in einem normalen Frame mache klappts Problemlos aber dafür wird die GUI zu groß ich will mir nicht die Mühe mit den Layouts machen. Kann mir jemand sagen wie ich dem GUI Builder beibringe das er das jPanel das meinPanel() zurückgibt auch anzeigen soll und nicht die leere Standardvorlage?
Und ich weis die Frage ist jetzt blöd und ich wusste auch mal wies geht aber wie kann ich nochmal zur Laufzeit den GUI Inhalt ändern eben besagtes JPanel durch einen neuen Aufruf von meinPanel() neu schreiben?
Danke im voraus
 
Keiner eine Idee? Das restliche Projekt ist fertig es hängt nur noch an diesem einen JPanel
Momentan sieht der Code des GUI Builder so aus:


jPanelSpielfeld = spielfeld();

jPanelSpielfeld.setBorder(javax.swing.BorderFactory.createEtchedBorder());


Wenn ich eine GUI von Hand aufbaue und dann this.add(spielfeld()); mache erscheint auch das Feld so wie es sein soll nur eben mit dem GUI Builder nicht. Könnte es u.u helfen eine von JPanel abgeleitete Klasse zu erstellen die eine setter Methode für den Inhalt hat?
 
nightmarevs schrieb:
wenn ich den GUI builder von Netbeans nehme dort ein JPanel einfüge und dann als custome code für die initialisierung "JPanel1 = meinPanel()" eingebe funktioniert das nicht es kommt nur das leere JPanels
Ganz klar, du überschreibst die Referenz auf das JPanel, das auf deinem Fenster sitzt mit einem neuen JPanel, das deine Methode zurückgibt. Gezeichnet wird das neue deshalb aber noch lange nicht.

Wenn du bei deinem GUI-Builder bleiben willst, musst du die Methode so aufbauen, dass sie ein bestehendes Panel ändert und nicht ein neues zurückgibt.
 
hmm ok ich werds mal so versuchen, eigentlich dachte ich das müsste klappen weil ich mit meinem Code die Zeile jPanel1 = new javax.swing.JPanel(); überschrieben habe davor war es ja noch gar nicht initialisiert.
 
nightmarevs schrieb:
wie kann ich nochmal zur Laufzeit den GUI Inhalt ändern eben besagtes JPanel durch einen neuen Aufruf von meinPanel() neu schreiben?
Meine Antwort bezog sich jetzt darauf.
Da musst du entweder das bestehende Panel modifizieren oder halt das alte wegwerfen und ein ganz neues erstellen, welches du dann aber auch auf dein Frame wieder adden musst.

Wenn du bei der Initialisierung direkt deine Methode aufrufst, sollte das funktionieren, soweit diese korrekt arbeitet.
HAb noch nie mit dem NetBeans-GUI-Builder gearbeitet, von daher kann ich dir dazu nichts sagen. Aber wenn ich das von Hand nachbaue (also eine Methode, die ein fertiges JPanel zurückgibt) und dies manuell auf nen JFrame draufklatsch, funktioniert das einwandfrei.
 
OK danke,
ja wenn ich es manuell nachbaue dann funktioniert das auch Problemlos nur im GUI Builder eben nicht obwohl der Code der zum Panel gehört auch nicht anders aussieht als mein selbstgebautes nur eben das nach dem Initialisieren noch ein paar Eigenschaften für die Formatierung dazukommen.
Ergänzung ()

Inzwischen konnte ich den Fehler einigermasen eingrenzen er liegt in folgendem Abschnitt:

Code:
jPanelSpielfeld.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        javax.swing.GroupLayout jPanelSpielfeldLayout = new javax.swing.GroupLayout(jPanelSpielfeld);
        jPanelSpielfeld.setLayout(jPanelSpielfeldLayout);
        jPanelSpielfeldLayout.setHorizontalGroup(
            jPanelSpielfeldLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 429, Short.MAX_VALUE)
        );
        jPanelSpielfeldLayout.setVerticalGroup(
            jPanelSpielfeldLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 297, Short.MAX_VALUE)
        );

wenn ich die setLayout Zeile auskommentiere wird das Panel angezeigt sonst nicht, es nützt aber auch nichts das Panel nach setLayout nochmal zu überschreiben obwohl es noch nicht dem Frame hinzugefügt wurde. Ohne das Layout ist eben meine ganze Formatierung im Eimer deswegen kann ich das höchstens bei einer Komponente auskommentieren bei den anderen brauche ich eine andere Lösung
 

Ähnliche Themen

Zurück
Oben