JFrame größer ziehen

kwonilchang

Aktives Mitglied
Hallo!

Habe noch ein Problem mit meiner GUI: Beim Programmstart soll nur ein kleiner leerer Frame angezeigt werden. Dann wird eine Datei via FileChooser eingelesen und ein Panel mit dem Dateiinhalt erstellt und auf den Frame gelegt. Soweit ist auch alles in Ordnung.

Es soll aber möglich sein, die Größe des Frames durch Ziehen mit der Maus zu ändern. Mache ich das, passt sich der Frame und sein Inhalt schön an. Führe ich aber dann eine Aktion aus, die zum Neuzeichnen des Frames führt, hat dieser wieder seine Initialgröße.

Code:
public Frame() {
        super("GUI");
        this.setSize(new Dimension(300, 300));
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        JMenuBar menuBar = createMenuBar();
        this.setJMenuBar(menuBar);
        
        /* lege Panel für das Spielfeld an */
        sudokuBoard = new JPanel();
        this.add(sudokuBoard, BorderLayout.CENTER);
        
        this.setVisible(true); // mache das Fenster sichtbar
    }
...
private void createGamefield() {
        sudokuBoard.removeAll(); //das Panel
        ....
        
        /* passe das Hauptfenster an und mache alles sichtbar */
        this.pack(); 
        this.setVisible(true); 
    }

Wie kann ich hier am geschicktesten auf die Fenstergrößenänderung eingehen? Gibt es da bereits eine resize()-Methode? Oder liegt es an dem pack()? Ich dachte, dass dies das Hauptfenster anpasst...

Danke schonmal!
 
S

SlaterB

Gast
pack()
höchstens am Anfang einmal verwenden, nicht bei späteren Updates, genausowenig setVisible(true) wenn das JFrame schon sichtbar ist,

schreibe
validate();
repaint();
 

kwonilchang

Aktives Mitglied
Jetzt muss ich doch noch mal nachhaken. Hab wohl was im Code geändert und jetzt passt die Anzeige nicht mehr.

Code:
public SudokuMainFrame() {
        super("SudokuGUI");
        this.setSize(new Dimension(FRAME_WIDTH, FRAME_HEIGHT));
        
        ...

       this.setVisible(true); // mache das Fenster sichtbar
    }

....

private void createGamefield() {
        
        sudokuBoard.removeAll();

        ... // Labels anlegen
        
        /* validiere das Hauptfenster und zeichne es neu */
        validate();
        repaint(); 
    }

....

public void update(Observable model, Object object) {

        /* entferne alle Komponenten und lege das graphische Spielfeld neu an */
        sudokuBoard.removeAll();
        createGamefield();

        /*
         * veranlasst das Panel, sein Layout neu anzulegen und sich dann neu zu
         * zeichnen
         */
        sudokuBoard.invalidate();
        sudokuBoard.validate();
        sudokuBoard.repaint();
    }

Wird das Fenster manuell vergrößert und werden Aktionen ausgeführt, bleibt die Größe erhalten. Das Problem liegt beim Laden. Wird die GUI gestartet, zeigt sich das Fenster in der initialen Größe. Wird nun eine Datei eingelesen (die Labels hierin haben feste Größe mit setPreferredSize()), soll sich das Fenster anpassen. Es ist aber so, dass sich die Labels ans Fenster anpassen :-(

Ich kann mir jetzt nicht erklären, warum das so ist. Sieht jemand den Fehler und kann mir erklären, woran das liegt?

Danke schonmal!
 
S

SlaterB

Gast
dass sich das Fenster aus irgendeinem Grund in der Größe verändert ist mir neu, warum sollte es?
die pack()-Methode macht das vielleicht, ja

was willst du denn alles?
wenn mehr Platz benötigt wird soll pack() vergrößern, aber wenn das Fenster erstmal eine gewisse Größe hat, ob manuell per Maus oder duch vorherige pack(), dann soll pack() nicht mehr verkleinern dürfen?

tja, ich kenne dieses Problem nicht, evtl. sendet pack() an das JFrame einen Aufruf wie setSize()

du kannst ja die Methode setSize() in einer eigenen JFrame-Klasse überschreiben und loggen wann sie mit welchen Parametern aufgerufen wird und je nach Vergleich mit vorhandenere Größe den Aufruf zulassen (super.setSize(x,y)) oder ignorieren,

derartige Modifikationen sind aber ziemlich gefährlich und aufwendig, ich kann da wenig empfehlen


und auch erwähnenswert:
How to Write a Component Listener (The Java™ Tutorials > Creating a GUI With JFC/Swing > Writing Event Listeners)
reagiert auf componentResized-Events, auch dort könntest du die Größe prüfen und gegebenenfalls zurückändern,
vielleicht aber zu spät, mit unschönen Grafik-Effekten verbunden
 

kwonilchang

Aktives Mitglied
Danke für Deine Antwort. Die Idee mit dem Loggen hab ich jetzt ausprobiert, denn offenbar geht das ohne pack() nicht. Hab jetzt in der create-Methode noch einen bool-Wert übergeben, damit sie pack() anwendet, sofern sie nicht aus einem Update heraus aufgerufen wurde. Ist zwar bestimmt keine allzu saubere Lösung, aber es klappt.

Bitte entschuldige nochmals meinen "Überfall"...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
fragenÜber(fragen); Turtle Grafik mit GUI (JFrame) Java Basics - Anfänger-Themen 3
E JFrame + Buffer-strategy Java Basics - Anfänger-Themen 8
I JFrame / Screen auf zweitem (definiertem) Monitor öffnen Java Basics - Anfänger-Themen 3
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
B HSQL mit JFrame steuern Java Basics - Anfänger-Themen 4
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
D Erste Schritte png in JFrame anzeigen? Java Basics - Anfänger-Themen 3
Thomathy Interface Wie schließt man ein anderes JFrame Fenster? Java Basics - Anfänger-Themen 6
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
S Kontrollieren ob jframe disposed ist Java Basics - Anfänger-Themen 3
Elyt JFrame in den Hintergrund verschieben Java Basics - Anfänger-Themen 3
OSchriever JFrame-Anwendungsfenster verschieben Java Basics - Anfänger-Themen 17
M Bild in JFrame Java Basics - Anfänger-Themen 1
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
W 2 JPanel in einem JFrame Java Basics - Anfänger-Themen 4
CptK Interface Klasse Frame (extends JFrame) aus anderer Klasse schließen Java Basics - Anfänger-Themen 7
S JFrame mit Hintergrundbild und Button Java Basics - Anfänger-Themen 4
S JFrame Java Basics - Anfänger-Themen 15
I JFrame proportional verkleinerbar machen Java Basics - Anfänger-Themen 3
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
T Auslagern von Methoden bei einem JFrame Java Basics - Anfänger-Themen 6
N Erste Schritte JFrame Caesar-Verschlüsselung Java Basics - Anfänger-Themen 23
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
3 JFrame immer im Hintergrund Java Basics - Anfänger-Themen 1
F Interface JFrame mit if-Abfrage automatisch schließen lassen? Java Basics - Anfänger-Themen 3
R JFrame nicht verschiebbar Java Basics - Anfänger-Themen 2
T Wenn JFrame Textfelder Hintergrund Grün dann... (if) Java Basics - Anfänger-Themen 3
K Java JFrame mit Hintergrundbild erstellen Java Basics - Anfänger-Themen 1
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
H Eclipse JFrame Java Basics - Anfänger-Themen 3
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
I JFrame minimieren wenn anderes Programm minimiert wird Java Basics - Anfänger-Themen 1
K Methoden Methode starten wenn JFrame geöffnet wird Java Basics - Anfänger-Themen 2
D Erste Schritte JFrame Inhalte werden nicht angezeigt Java Basics - Anfänger-Themen 8
A Variablen In anderer Klasse auf Objekte von JFrame zugreifen Java Basics - Anfänger-Themen 1
B Ist MyFrame oder JFrame besser? Java Basics - Anfänger-Themen 3
Y JFrame sichtbarkeit Java Basics - Anfänger-Themen 4
KeVoZ_ Label auf JFrame willkürlich Positionieren Java Basics - Anfänger-Themen 2
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
P JFrame nur einmal öffnen Java Basics - Anfänger-Themen 4
D JFrame - 10 Sekunden bis zum schließen warten. Java Basics - Anfänger-Themen 2
V Tastatur initialisieren JFrame Probleme Java Basics - Anfänger-Themen 6
J JPG in JFrame anzeigen lassen Java Basics - Anfänger-Themen 3
J JFrame ausgabe von Werten Java Basics - Anfänger-Themen 9
F GUI als Klasse oder extend JFrame? Java Basics - Anfänger-Themen 6
F JFrame resize verschiebt JPanel Java Basics - Anfänger-Themen 3
S Wieso wird mein JFrame transparent dargestellt? Java Basics - Anfänger-Themen 5
L [JFrame] Exception - woher? Java Basics - Anfänger-Themen 8
thomasbomme Grafikfehler JFrame- Cleartype Java Basics - Anfänger-Themen 1
GreyFox Arbeit mit JFrame Java Basics - Anfänger-Themen 8
T Erste Schritte 2 Codes zusammen fügen / Label in JFrame Java Basics - Anfänger-Themen 1
Z Zwei Images auf einem JFrame - Aber nur eins wird angezeigt! Java Basics - Anfänger-Themen 5
N Input/Output Wenn kein Input, dann Fehler anzeigen lassen im JFrame Java Basics - Anfänger-Themen 6
W 2 JPanels in 2Klasse in einem JFrame zusammenfügen Java Basics - Anfänger-Themen 12
dat_vin JFrame öffnet sich mehrmals Java Basics - Anfänger-Themen 6
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
M Rahmen für undekorierten JFrame Java Basics - Anfänger-Themen 6
S JPanel wird versetzt auf JFrame gelegt Java Basics - Anfänger-Themen 2
B Erste Schritte JFrame in Klasse auslagern Java Basics - Anfänger-Themen 4
H JFrame komplett schließen Java Basics - Anfänger-Themen 3
S Brauche hilfe bei Pong (JFrame) Java Basics - Anfänger-Themen 2
M hintergrund in jframe festlegen Java Basics - Anfänger-Themen 4
J JFrame Render Fehler - Warum? Java Basics - Anfänger-Themen 2
I komponenten werden in JFrame nicht richtig angezeigt Java Basics - Anfänger-Themen 1
E 2. JFrame erkennt 1. Frame Java Basics - Anfänger-Themen 6
D Best Practice JFrame im JFrame Java Basics - Anfänger-Themen 2
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
S Erste Schritte Von JFrame in nächstes JFRame wechseln Java Basics - Anfänger-Themen 0
V JFrame aktualisieren Java Basics - Anfänger-Themen 6
S JFrame ist nicht schwarz Java Basics - Anfänger-Themen 5
B JPanel/JFrame in ein Applet umwandeln (Webfähig) Java Basics - Anfänger-Themen 7
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
S JFrame wird nicht "bemalt" Java Basics - Anfänger-Themen 2
M Unsichtbare Objekte in JFrame Java Basics - Anfänger-Themen 2
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
Sogomn JLabel in anderer Klasse zum JFrame hinzufügen Java Basics - Anfänger-Themen 2
B Drawline wird auf JFrame nicht angezeigt Java Basics - Anfänger-Themen 3
N Fokus setzen nachdem JFrame in Vordergrund geholt wurde Java Basics - Anfänger-Themen 7
K Methoden Objekt auf JFrame zeichnen Java Basics - Anfänger-Themen 16
S JFrame leeren Java Basics - Anfänger-Themen 6
X JFrame Fenster einzeln schließen Java Basics - Anfänger-Themen 2
J Klick auf Button -> JFrame öffnet sich erneut. & Datei lässt sich nicht löschen Java Basics - Anfänger-Themen 7
K Erste Schritte Jframe Im Jpanel Java Basics - Anfänger-Themen 4
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
P JFrame Component automatische Größe verhindern Java Basics - Anfänger-Themen 2
D JFrame, Komponenten verschmiert. Java Basics - Anfänger-Themen 15
M Schriftfarbe in JFrame Java Basics - Anfänger-Themen 24
A JFrame läuft ewig? Java Basics - Anfänger-Themen 2
U JFrame durch ActionListener erweitern Java Basics - Anfänger-Themen 4
B Wie kann man auf das JFrame einer anderen Klasse zugreifen, etwas hinzufügen und entfernen?? Java Basics - Anfänger-Themen 3
N JFrame-Objekt in neuer Methode nicht verfügbar? Java Basics - Anfänger-Themen 3
A Frage zu: JFrame setLocationRelativeTo Java Basics - Anfänger-Themen 3
N Erste Schritte Prozessor Kernanzahl in JFrame Java Basics - Anfänger-Themen 3
DStrohma Transparenter JFrame Java Basics - Anfänger-Themen 3
R JFrame über einen JPanel Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben