Java Java-GUI Seite ist leer

NichtExpert

Lt. Junior Grade
Registriert
Feb. 2020
Beiträge
465
Hallo,
Ich habe folgendes Problem.
Ich möchte in Java ein Programm schreiben. Genauer genommen eine GUI. Diese habe ich vollständig erstellt und funktioniert auch. Irgendwo gibt es jedoch ein kleines Problem, welches mich extrem stört und ich nicht gelöst bekomme.
habe auch keine andere Seite gefunden, wo dieses Problem entsteht.

Habe der GUI eine Größe zugewiesen. Ist mit JFrame gemacht worden... Habe gelesen, dass man das so nicht machen soll aber naja...
Wenn ich die GUI ausführe öffnet sich das Fenster. Jedoch leer. Erst wenn ich das Fenster Maximiere und dann wieder Minimiere erscheinen meine JButtons, Jtextfelder und JLabel.
Eine Weitere Methode ist, nur eine Seite zu vergrößern/verkleinern.
Also nochmal kurz Zusammengefasst:
Das Programm öffnet sich und die Buttons, Textfelder, etc. sind erst sichtbar, wenn ich die Größe ändere.

Hat einer einen Plan woran das liegen kann?
Meinen Code kann ich natürlich auf nachfrage nachschicken.
 
Such mal nach repaint() revalidate() usw.
Ich vermute Du musst das Panel und / oder den Frame einmal "neuzeichnen".
Das passiert beim verändern der Fenstergröße automatisch.
 
NichtExpert schrieb:
Hat einer einen Plan woran das liegen kann?
Vermutlich an deinem Code. ;)

NichtExpert schrieb:
Meinen Code kann ich natürlich auf nachfrage nachschicken.
Wäre ein Anfang. Am Besten gleich so viel rauslöschen, dass das Problem noch besteht, aber es möglichst wenig Code ist.
 
package Test;

import GUI.Info_Frame;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class GUI_Plus_Rechner {

public static void main(String[] args)
{
/* Erzeugung eines neuen Frames mit dem
Titel "Beispiel JFrame " */
JFrame meinFrame = new JFrame("Überschrift");
/* Wir setzen die Breite auf 600 und die Höhe
unseres Fensters auf 400 Pixel */
meinFrame.setSize(600,400);
// Wir lassen unseren Frame anzeigen
meinFrame.setVisible(true);
meinFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel meinPanel = new JPanel();
meinPanel.setLayout(null);
JButton button = new JButton("Drück mich");
button.setBounds(250,300,110,25);


JLabel überschrift = new JLabel("Überschrift");
überschrift.setBounds(250,50,300,25);
überschrift.setFont(new Font("Times New Roman", Font.PLAIN, 32));

JLabel meinLabel = new JLabel("Bitte Antworten");
meinLabel.setBounds(100,100,110,25);

JLabel meinLabel2 = new JLabel("Bitte Antworten");
meinLabel2.setBounds(100,200,110,25);

JTextField meinTextfield = new JTextField();
meinTextfield.setBounds(250,100,160,25);


JTextField meinTextfield2 = new JTextField();
meinTextfield2.setBounds(250,200,160,25);

JButton btnClose = new JButton("Close");
btnClose.setBounds(400,300,80,25);
btnClose.addActionListener(e -> System.exit(0));

JButton reset = new JButton("Reset");
reset.setBounds(450,150,80,25);
reset.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
meinTextfield.setText("");
meinTextfield2.setText("");
}
});



meinPanel.add(button);
meinPanel.add(überschrift);
meinPanel.add(meinLabel);
meinPanel.add(meinLabel2);
meinPanel.add(meinTextfield);
meinPanel.add(meinTextfield2);
meinPanel.add(btnClose);
meinPanel.add(reset);
meinFrame.add(meinPanel);
}
}
 
Die Threading-Regeln nicht zu beachten, ist ein häufiger Fehler. (Praktisch) Alle GUI-Operationen gehören in den EDT, auch das Starten der GUI.

Aber hier liegt es am Layout.... Ein lauffähiges Beispiel wäre gut!
 
Name ist bescheuert, dient nur zu Testzwecken.
Ergänzung ()

Rossie schrieb:
Die Threading-Regeln nicht zu beachten, ist ein häufiger Fehler. (Praktisch) Alle GUI-Operationen gehören in den EDT, auch das Starten der GUI.
Das heißt?
Kenne mich mit GUI nicht aus
 
Du setzt ziemlich weit oben den Frame auf visible(true).
Danach veränderst Du die GUI noch.

Entweder zum Schluss .setVisible(true) aufrufen - oder mein Vorschlag von oben mit .revalidate() / .repaint().
 
  • Gefällt mir
Reaktionen: NichtExpert
space-rocker schrieb:
Du setzt ziemlich weit oben den Frame auf visible(true).
Danach veränderst Du die GUI noch.

Entweder zum Schluss .setVisible(true) aufrufen - oder mein Vorschlag von oben mit .revalidate() / .repaint().
Funktioniert jetzt. Musste den set.Visible(true)-Teil nach unten setzen.
Setze mich auch gleich mal dran, den Code übersichtlicher zu machen und Kommentare einzufügen.
Vielen Dank für eure Hilfen.🙏
Besonders dir @space-rocker. Das war Super👍
 
  • Gefällt mir
Reaktionen: space-rocker
Zurück
Oben