JFrame flackern durch setSize()

Status
Nicht offen für weitere Antworten.

Bit2_Gosu

Bekanntes Mitglied
Hi !

Das Programm startet mit einem JFrame mit einer width von FRAMEWIDTH. Wenn ein Button geklickt wird, wird der Inhalt des Frames verändert, der Frame anschließen ge packt() t. Da sich durch pack() die frame width ändert, muss diese mit setSize() wieder auf die Konstante FRAMEWIDTH hergestellt werden.

Und genau letzteres führt dazu, dass fast (warum nur fast weiß ich nicht) immer wenn auf den Button geklickt wird, ein Flackern auftritt. Das liegt nicht daran, dass der Inhalt geändert wird, denn das Flackern tritt nicht auf, wenn ich das abschließende setSize() weglasse.

wenn ich zu Beginn des Buttonklicks den frame invisible setze und am ende wieder sichtbar führt das (logischer weise) nur zu einem noch größeren Flackern anderer Art.

Das Flackern ist ja durchaus verständlich, nur fällt mir leider nichts mehr ein, wie ich das Problem umgehen könnte ...


Hat jemand eine Idee ?
 
Wenn auf den Button geklickt wird, werden den Panels etc. des Frames neue Elemente zugefügt. Das können dann auch mehr werden als vorher. pack() sorgt so dafür, dass bezüglich der HÖHE alles passt !

(Die width wird allerdings durch mehr Elemente nicht beeinflusst, trotzdem wird auch sie durch pack() möglichst klein gehalten und muss deshalb mit setSize() wieder korrigiert werden)
 
meintest du setPreferredSize() ?

Wenn ich vor dem pack() die preferredSize(dim) setze, weis ich dass ich der Dimension dim eine width von FRAMEWIDTH gebe, aber nicht was für eine hight, weil die ja erst durch pack() passend gesetzt wird. Ich habs mal so probiert:

Code:
Dimension dim = new Dimension(FRAMEWIDTH,aFrame.getSize().height);
			aFrame.setPreferredSize(dim);
			aFrame.pack();

Hat aufgrund der Höhe nicht geklappt :?

Wenn du getPrefferedSize meintest weiß ich nicht genau was ich damit machen soll.
 
Nein, ich meine getPreferredSize. Dann weißt du wie breit der Frame sein sollte und brauchst auch kein pack
 
Was glaubst du wie pack() an die Größe kommt? :roll:
Code:
    public void pack() {
	Container parent = this.parent;
	if (parent != null && parent.getPeer() == null) {
	    parent.addNotify();
	}
	if (peer == null) {
	    addNotify();
	}
  ->      Dimension newSize = getPreferredSize();
        if (peer != null) {
            setClientSize(newSize.width, newSize.height);
        }

        if(beforeFirstShow) {
            isPacked = true;
        }

	validate();
    }
 
Ah kapito 😉

Jetzt funktioniert es auch ohne flackern !!

Scheint also am pack() gelegen zu ham und nicht ma setSize().

Vielen Dank !!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben