Swing JFrame erstellt; weitere Elemente werden nicht eingefügt/sind nicht zu sehen

Lunar

Lunar

Mitglied
Hey erstmal,
hoffe das ist das richtige Unterforum!

Und tut mir Leid, falls es so ein Thema schon gibt, hab es beim Suchen nicht gefunden.

Ich denke meinen Kenntnisstand könnte man als "Anfänger" bezeichnen.

Mein Problem ist folgendes:
Ich habe Snake als zweidimensionale Reihung programmiert.
Diese soll nun abgebildet werden. Nach einiger Recherche (bisher hatte ich keinerlei Erfahrung mit dem Implementieren von graphischen Oberflächen) und der Verwurstelung mehrer Tutorials und Codeschnipsel bin ich hierzu gekommen:

Erzeugung der einzelnen Bildelemente, welche nicht sich nicht ändern:
public static void main(String args[]) throws InterruptedException {
 
        //create window
        JFrame window = new JFrame("Snake");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(800, 600);
        window.setLocationRelativeTo(null);
        JPanel gamePanel = new JPanel();
        window.add(gamePanel);     
        String[] snake = {"","","","","","","","","",""};     
        window.setVisible(true);
        gamePanel.setVisible(true);

Später, in einer Schleife, da sich natürlich die Position im Array ändert, folgt dieser Codeschnipsel:

Einfügen der eigentlichen Tabelle:
        //insert game into window
        JTable game = new JTable(world, snake);
        gamePanel.add(new JScrollPane(game));
        game.setVisible(true);

"world" ist hierbei das Array, dass die Snake-Elemente enthält. Es gibt keinerlei Fehlermeldungen, dass Programm läuft auch einfach weiter und hängt nirgends, das ist bereits geprüft.

Ich schätze mal, dass ich hier ziemlichen Spaghetti-Code produziert habe.
Auf jeden Fall wird zwar der/das Frame geöffnet, wenn ich die Methode ausführe, aber leider wird darin nichts und wieder nichts abgebildet, weder eine leere Tabelle, noch eine Scrollbar, noch irgendetwas.

Würde mich deswegen über etwas Hilfe freuen!

MfG
Lunar

P.S.: Würde mich vor allem über Erklärungen freuen, viel mehr als über Codes, welche ich dann kopieren und verwenden kann.
 
kneitzel

kneitzel

Top Contributor
Also wenn Du von "in einer Schleife" sprichst, dann vermute ich, dass Du innerhalb des EDT (Event Dispatch Thread) eine Schleife laufen lässt und daher keine Events mehr abgearbeitet werden können ...

Aber ehe ich hier lang und breit erkläre, einfach einmal ein Verweis auf Dokumentation, die Du durchlesen solltest:

In Kurzform: Die Applikation basiert auf Events, die abgearbeitet werden müssen. Ein Event ist z.B. die Aufforderung, dass das Fenster sich neu zeichnen soll. Dies wird bei Veränderungen angetriggert (und wenn Du etwas veränderst und das antriggern willst, dann musst Du das repaint und ggf. auch das revalidate aufrufen. Wichtig: Das sind Aufrufe, die noch nichts anderes machen als ein Event in die Eventqueue zu packen.

Daher musst Du so schleifen in einem eigenen Thread ausführen, damit der EDT weiter Events abarbeiten kann (und das Fenster auch neu gemalt werden kann).

Da kommt dann aber noch die zweite Besonderheit: Alle Swing Elemente mögen es in der Regel gar nicht, wenn diese außerhalb des EDT verändert werden. Wenn Du also ein Element hinzufügen oder verändern willst, dann sollte dies innerhalb des EDT erfolgen. Das kannst Du dadurch erreichen, dass Du ein invokeLater Aufruf durchführst (Siehe Link! Das wird da auch erläutert!). Das macht dann aber unter dem Strich auch nichts anderes, als ein entsprechendes Event in die Queue zu packen, das dann besagt: "mach das mal.".

Das als ganz kurze Erläuterung.
 
Lunar

Lunar

Mitglied
Hi,
danke erstmal für die Antwort!
Verstehe zwar hauptsächlich Bahnhof, aber denke, das wird sich mit dem Lesen/Verstehen des Links legen.
Mit "einer Schleife" ist durchaus eine einfache "while-Schleife" gemeint. Weiß nicht, ob das unter EDT fällt, schätze mal nicht. Da bei Snake ja jede Runde das selbe vom Programm ausgeführt wird (Bewegen in eine Richtung, abhänigig von der Richtung des Kopfes + mögliche Events die über Variablen getriggert werden) hat mir das gereicht. Sollte ich das besser umschreiben?

Einen Teil des Problems habe ich bisher wahrscheinlich gar nicht benannt, bzw. nicht klar genug herausgestellt: Warum sehe ich gar nichts in meinem Fenster, außer dem (standart-) grauen Hintergrund? Müsste nicht selbst bei einem Fehler in der Änderung des Frameinhalts wenigstens zuvor mehr als nur der Frame dargestellt werden?

MfG
Lunar
 
kneitzel

kneitzel

Top Contributor
Ein Vergleich, der etwas hinkt: EDT ist wie ein Postbote. Er nimmt immer einen Brief (Event) von einem Stapel und gibt ihn an den Adressaten. Aber er muss warten, bis der Empfänger den Brief verarbeitet hat.

Nun kommt ein Brief zu Dir und Du nimmst ihn an und dann machst Du irgendwas - aber kommst nie zu einem Ende. Dann ist der Postbote vor Deiner Tür und wartet und alle anderen Briefe stapeln sich und werden nicht ausgetragen.

Daher: Alles, was eine gewisse Zeit läuft wird in einen separaten Thread ausgelagert. Also jegliche (lang laufnden) Schleifen oder sonst irgendwas sind - ohne dass Du es auslagerst - ein absolutes NO GO.

Und ja - dann hast Du nur ein leeres, graues Fenster. Denn Der Maler, der den Inhalt malt, macht dies nur, wenn der Postbote ihm einen Brief mit entsprechendem Auftrag bringt. Und genau der Brief kommt nicht, weil der Postbote auf Deine while Schleife warten ...
 
Lunar

Lunar

Mitglied
Hi,
okay, danke für den Nachtrag!
Werde mich dann wohl mal etwas mit Threads, etc. beschäftigen bevor ich weitermache!

MfG
Lunar
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JFrame wird zu klein erstellt AWT, Swing, JavaFX & SWT 7
V JFrame wird dank "dauerschleife" nicht erstellt AWT, Swing, JavaFX & SWT 3
L JFrame Gui in anderer Methode aufrufen AWT, Swing, JavaFX & SWT 0
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
VPChief Ein JFrame ohne setUndecorated(true); nicht verschiebbar machen. AWT, Swing, JavaFX & SWT 6
R Swing Hat mein JFrame meinen Component? AWT, Swing, JavaFX & SWT 2
R Swing Design des oberen Balkens in JFrame AWT, Swing, JavaFX & SWT 2
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
R Swing Komponente im JFrame überschreinen sich AWT, Swing, JavaFX & SWT 7
R Swing Ein gezeichneten String aus dem JFrame löschen AWT, Swing, JavaFX & SWT 5
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
T JFrame aktualisieren AWT, Swing, JavaFX & SWT 2
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
L Verbindung von Code und JFrame AWT, Swing, JavaFX & SWT 4
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
T JavaFX JFrame verhalten wie JOptionPane (ErrorMessage) AWT, Swing, JavaFX & SWT 1
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
F JFrame zeigt nicht alle Elemente auf anhieb an AWT, Swing, JavaFX & SWT 4
P JPanle, JFrame und Graphics AWT, Swing, JavaFX & SWT 2
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
K Grafik in JFrame einpassen AWT, Swing, JavaFX & SWT 3
D Mit Jmenu neue JFrame öffnen AWT, Swing, JavaFX & SWT 2
J BackgroundJPanel passt sich dem JFrame nicht an AWT, Swing, JavaFX & SWT 7
C Swing JFrame ändert Größe AWT, Swing, JavaFX & SWT 0
J JFrame Panel hinzufügen AWT, Swing, JavaFX & SWT 10
K JFrame bei JUnit Tests AWT, Swing, JavaFX & SWT 2
Wood14Mine Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
D JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 1
R Swing JPanels auf JFrame auf verfügbaren Platz aufblasen AWT, Swing, JavaFX & SWT 4
JR2205 Swing JxMaps Einbindung Netbeans JFrame AWT, Swing, JavaFX & SWT 4
Zar von Domarus JFrame zu BufferedImage konvertieren AWT, Swing, JavaFX & SWT 3
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
Joker4632 JFrame in eine Runnable auslagern? AWT, Swing, JavaFX & SWT 4
M Limit für JFrame-Vergrößerung AWT, Swing, JavaFX & SWT 8
GreenTeaYT Wie vergebe Ich den Jframe Title den Namen aus einem Element von der Arraylist ? AWT, Swing, JavaFX & SWT 4
MaxG. JFrame Größe ändern AWT, Swing, JavaFX & SWT 16
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
Ghostman1711 JFrame closing AWT, Swing, JavaFX & SWT 3
R Engineklasse mit JFrame AWT, Swing, JavaFX & SWT 4
M Default-WindowListener JFrame entfernen (Stichwort: iconified) AWT, Swing, JavaFX & SWT 4
ms_cikar Jframe zurück zu frame1 AWT, Swing, JavaFX & SWT 14
C Jframe ohne Rahmen AWT, Swing, JavaFX & SWT 3
lumpigerAffe Swing Jframe aktualisieren AWT, Swing, JavaFX & SWT 27
A Swing JFrame neuzeichnen lassen, position neu berechnen lassen? AWT, Swing, JavaFX & SWT 9
R JFrame schließen AWT, Swing, JavaFX & SWT 9
P Swing JFrame minimiert sich bei Doppelklick auf die Titel-Leiste AWT, Swing, JavaFX & SWT 16
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
I JFrame an Bildschirm anpassen AWT, Swing, JavaFX & SWT 1
I JFrame Bild strecken und auf Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 2
P JFrame schrumpft bei Doppelklick auf die Titelleiste AWT, Swing, JavaFX & SWT 0
G JFrame - manuell Größe verändern AWT, Swing, JavaFX & SWT 6
D JFrame mindestgröße erzwingen AWT, Swing, JavaFX & SWT 2
H Swing JFrame mit JFXPanel NPE bei dispose() AWT, Swing, JavaFX & SWT 6
C Swing Borderlayout im JFrame AWT, Swing, JavaFX & SWT 4
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
G Swing JFrame öffnen bei Pidgin Benachrichtigung AWT, Swing, JavaFX & SWT 5
OlafHD JLabel im JFrame Zentrieren AWT, Swing, JavaFX & SWT 2
S Kein JFrame unter Mac? AWT, Swing, JavaFX & SWT 8
G Resize JFrame AWT, Swing, JavaFX & SWT 8
J Teiltransparenter JFrame mit Blur-Effekt AWT, Swing, JavaFX & SWT 2
K Bild in JFrame AWT, Swing, JavaFX & SWT 2
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
M NetBeans JFrame Grundlangen fragen AWT, Swing, JavaFX & SWT 6
I Neues JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 5
S JFrame -> setVisible AWT, Swing, JavaFX & SWT 3
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
I Swing JMenuBar auch unten am JFrame? AWT, Swing, JavaFX & SWT 2
K SplashScreen neben JFrame behalten AWT, Swing, JavaFX & SWT 10
F Swing JLabel in JFrame anpassen AWT, Swing, JavaFX & SWT 20
B Swing Unterteiltes JFrame mit Bild in der Mitte AWT, Swing, JavaFX & SWT 4
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
T Applet Applet in JFrame einbinden AWT, Swing, JavaFX & SWT 8
V JFrame wird nicht richtig angezeigt! AWT, Swing, JavaFX & SWT 2
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
Y Kann man Buttons in einem JFrame rund machen ? AWT, Swing, JavaFX & SWT 2
W Swing Farbige JPanels auf JFrame werden nicht gezeigt. Was mach ich falsch? AWT, Swing, JavaFX & SWT 7
Z Java Draw -JFrame finde nicht die Mitte & höhe, breite AWT, Swing, JavaFX & SWT 7
O Swing JFrame Anzeigeproblem AWT, Swing, JavaFX & SWT 2
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
J Swing unterschiedliche Inhalte in einem JFrame AWT, Swing, JavaFX & SWT 3
Avarion Swing JFrame unter Windows 10 kleiner ?! AWT, Swing, JavaFX & SWT 2
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
O Neuen JFrame öffnen und alten schließen AWT, Swing, JavaFX & SWT 7
F Bilder in jFrame einfügen AWT, Swing, JavaFX & SWT 3
H drawLine im JFrame FullScreenWindow AWT, Swing, JavaFX & SWT 12
M Panel in geerbter JFrame Klasse adden AWT, Swing, JavaFX & SWT 4
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
P JFrame manuell Grösse verändern durch 'mouseDragged' AWT, Swing, JavaFX & SWT 3
S Swing JFrame hat nicht die Größe, die ich eingegeben habe AWT, Swing, JavaFX & SWT 3
J Swing: JFrame nach oben "aufklappen" AWT, Swing, JavaFX & SWT 0
X JFrame erst nach dem Laden sichtbar stellen AWT, Swing, JavaFX & SWT 8
GianaSisters JFrame mit JInternalFrames, Keylistener-Problem AWT, Swing, JavaFX & SWT 9
H Swing &MouseListener in einem JFrame, sinnig? AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Anzeige

Neue Themen


Oben