Resize JFrame

Gmork

Mitglied
Guten Abend,

ich habe folgendes kleines Problem:
Ich habe ein Element auf meinem Fenster (Null-Layout), welchem ich eine relative Position zugewiesen habe. Da Java diese Funktion dafür nicht bietet, muss ich nach dem Verändern der Größe des Frames das Element an die passende Position setzen.
Und da erscheint mein Problem...
Durch das Vergrößern/Verkleinern des Fensters stimmt kurzzeitig die relative Koordinate nicht mehr, welche natürlich sofort danach neu gesetzt wird. Der Schaden es ist aber schon entstanden - es entsteht ein Filmmern beim Skalieren.

(Sofort danach heißt der Frame besitzt einen ComponentAdapter mit der Methode componentResized(ComponentEvent evt), welcher dann die relative Position des Elements updatet.)
Hat jemand einen Vorschlag, wie ich das Problem umgehen könnte? :/
Danke schonmal für jede Hilfe!

MfG,
Gmork
 
X

Xyz1

Gast
Null-Layout ist doch evil. Nimm einen Layout-manager mit gaps, damit wird das gleiche erreicht, und die Probleme bei resize treten gar nicht auf.
 

Gmork

Mitglied
Ich habe mich jetzt genauer mit Layouts im allgemeinen beschäftigt.
Wenn ich das richtig verstanden habe, sind Gaps ja nichts anderes als eine Definition
der Bibliothek-Layouts.

Ich habe jetzt ein eigenes Layout geschrieben und angewendet. Dazu habe ich
auf mein JFrame ein BorderLayout gelegt und in die Mitte davon ein JPanel mit
meinem Layout.
Nun habe ich einem Element auf mein Layout gelegt, welches 100 Pixel vom rechten
Rand des JPanels gezeichnet wird.

Wenn ich jetzt mein Fenster skaliere, wird dank BorderLayout auch mein JPanel skaliert.
Dadurch wird mein Layout aktualisiert und die Position des Elements geupdatet.
Soweit so gut. Leider wird es immer noch erst mit der alten Position gezeichnet und dann
aktualisiert und neu gezeichnet. Das sorgt für ein Flimmern.
Eine Idee, wie ich das umgehen kann?

Ich sollte wohl noch erwähnen, dass gesagtes Flimmern nur auftritt, wenn ich beim Skalieren den linken Fensterrand bewege... Skaliere ich vom rechten Rand aus, funktioniert alles. o_O
 

Blender3D

Top Contributor
Null-Layout ist doch evil
Ja grundsätzlich Layoutmanager verwenden. Aber zum Glück gibt es auch das Null-Layout.
Wer z.B. ein GUI für ein Spiel schreibt wo auch die Framerate wichtig ist, freut sich über die Möglichkeit auch ohne Layoutmanager zu arbeiten, und auf das Verschachteln von Panels verzichten zu können.
Wichtig ist: Man muss halt wissen was man tut. Die Layoutmanager dienen dazu Standardlösungen für das Problem wie z.B. ein Resize zu bieten und das ist auch gut so.
Trotzdem hat das Null-Layout seine Berechtigung.
 
Zuletzt bearbeitet:

Gmork

Mitglied
*Push*
Mein Beitrag vom 16. März ist leider immer noch aktuell...
f8c6b8cd6c6e16055e14a6e0b3dd56d6.png


Eigenes Layout: (Beispiel-Code)

Java:
....
JPanel panel;
...
@Override
public void addLayoutComponent(String name, Component comp) {
   panel = (JPanel) comp;
}

@Override
public void layoutContainer(Container parent) {
   panel.setBounds(parent.getWidth()-10, 0, 10, parent.getHeight())
}
...

Beim Skalieren über den rechten Fensterrand bleibt die Größe der seitlichen Panels 10 Pixel. Selbiges beim Bewegen des Fensters.
Ziehe ich jedoch den linken Fensterrand nach rechts, so wird das seitliche Panel kleiner und entsprechend größer, wenn ich den linken Fensterrand nach links ziehe.
Die 10 Pixel-Größe bleibt somit nicht erhalten...

Es muss also irgendwie an dem dabei geschehenden Positionswechsel mit der Skalierung liegen. Allerdings weiß ich nicht, wie ich das umgehen kann.
Ich wäre wirklich sehr dankbar, wenn jemand da eine Idee hätte...
Danke schonmal für jede Hilfe!

MfG,
Gmork

(Der Code ist übrigens wie angemerkt Beispiel-Code und eine Vereinfachung meiner Problematik. Kritik zum Code ist von daher nicht sinnvoll/hilfreich.)
 
Zuletzt bearbeitet von einem Moderator:

Gmork

Mitglied
Ich kann meinen alten Beitrag leider nicht mehr editieren, von daher hier.
Das Problem ist noch grundlegender als gedacht:

JFrame mit eigenem Layout (wie oben beschrieben) und einem JPanel darauf,
welches am rechten Rand gezeichnet wird mit 10 Pixel Breite.
Auch hier tritt der Fehler auf: Ziehe ich den linken Rand des Fensters zum Skalieren, so wird es erst falsch gezeichnet
um kurz darauf richtig gezeichnet zu werden, was ein Flimmern erzeugt.

Meinen Code, der nur die Problematik umfasst, habe ich einmal hier separiert:
Java:
public class Starter {
 
   private static TestWindow testWindow;

   public static void main(String[] args) {
     testWindow = new TestWindow();
   }
}
Java:
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestWindow {
 
    private JFrame frame;

    public TestWindow() {
        frame = new JFrame();
        frame.setBounds(100, 100, 765, 599);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setLayout(new OwnLayout());

        JPanel pnl = new JPanel();
        pnl.setBackground(Color.BLUE);
        frame.add("", pnl);
    }
}
Java:
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;

import javax.swing.JPanel;

public class OwnLayout implements LayoutManager {

    JPanel pnl;

    public OwnLayout() {
    }

    @Override
    public void addLayoutComponent(String name, Component comp) {
        pnl = (JPanel) comp;
    }

    @Override
    public void layoutContainer(Container parent) {
        if (pnl != null)
            pnl.setBounds((int) parent.getWidth() - 50, 0, 50, (int) parent.getHeight());
    }

    @Override
    public Dimension minimumLayoutSize(Container parent) {
        return null;
    }

    @Override
    public Dimension preferredLayoutSize(Container parent) {
        return null;
    }

    @Override
    public void removeLayoutComponent(Component comp) {
        pnl = null;
    }
}

Ich wäre wirklich sehr dankbar, wenn jemand einen Vorschlag für mich hätte.

MfG,
Gmork
 

Gmork

Mitglied
Falls das irgendwen interessiert:
Okay, dank einer Antwort auf stackoverflow.com habe ich nun erfahren,
dass dieses Problem wohl nicht wirklich zu beheben ist.

Da das Betriebssystem erst den Rahmen zeichnet und danach mit einem Delay
die Information an Java weitergibt und dann erst die Inhalte geupdatet werden,
entsteht durch das Delay das Flimmern. :/

(Das erklärt übrigens dann auch warum das Flimmern beim Skalieren jedes Fensters kommt.)
 

Gmork

Mitglied
Ja und du hattest Recht. Ich wollte es hier nur noch einmal dazuschreiben, damit,
falls jemand auch auf das Problem stößt und dieses Thema findet, das Fazit sieht. ;)

Danke übrigens noch einmal. stackoverflow war ein guter Tipp! Ich habe sofort Hilfe bekommen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
W Zeichnen in einem JFrame nach Resize AWT, Swing, JavaFX & SWT 7
TiME-SPLiNTER JLabel mit Icon & JFrame Resize AWT, Swing, JavaFX & SWT 5
J JTextArea verschwindet bei resize vom JFrame AWT, Swing, JavaFX & SWT 2
T JFrame resize AWT, Swing, JavaFX & SWT 2
J Swing JFrame resize-Möglichkeiten AWT, Swing, JavaFX & SWT 10
hdi Swing JFrame Resize nicht in "Echtzeit" AWT, Swing, JavaFX & SWT 4
S Swing JTabbedPane: Resize des JFrame bei Tab wechsel AWT, Swing, JavaFX & SWT 8
S JFrame instante Resize AWT, Swing, JavaFX & SWT 3
T schönes Resize bei eigenem JFrame AWT, Swing, JavaFX & SWT 5
J JFrame resize in Echtzeit AWT, Swing, JavaFX & SWT 3
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
M Swing Component Resize AWT, Swing, JavaFX & SWT 7
Z JavaFX Pane für wechselnde Sub-Panes mit Auto-Resize AWT, Swing, JavaFX & SWT 2
J Resize Node im BorderPane AWT, Swing, JavaFX & SWT 7
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
Yjuq JavaFX Custom Control - Image resize AWT, Swing, JavaFX & SWT 0
robinab JavaFX TableView column resize nach setItems() AWT, Swing, JavaFX & SWT 0
J Button vergrößert sich bei Fenster resize AWT, Swing, JavaFX & SWT 22
B JavaFX Scene Builder: resize funktioniert (meist) nicht AWT, Swing, JavaFX & SWT 6
B Resize von Image nach Resize von Button AWT, Swing, JavaFX & SWT 1
HaukeG JavaFX JavaFX Resize und DragAndDrop eines Pane AWT, Swing, JavaFX & SWT 4
E JavaFX ScrollBar in TableView bei Column Resize AWT, Swing, JavaFX & SWT 2
T Bild drehen ohne Resize AWT, Swing, JavaFX & SWT 3
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
J resize - Label bleibt erst schwarz AWT, Swing, JavaFX & SWT 4
M Kein resize nach Component.setVisible() AWT, Swing, JavaFX & SWT 2
lumo SWT Resize und aktualisierung der gui AWT, Swing, JavaFX & SWT 6
M Seltsames Problem mit Resize eines Fensters und seiner Komponenten AWT, Swing, JavaFX & SWT 2
frankred Swing Canvas nach "Window-resize" neu Zeichnen lassen wegen Anzeigefehler AWT, Swing, JavaFX & SWT 4
1 Swing manual resize table column to min size AWT, Swing, JavaFX & SWT 2
W SWT Resize Tree-Element AWT, Swing, JavaFX & SWT 3
R Resize Rectangle Problem AWT, Swing, JavaFX & SWT 3
A SWT Group und Column mit Resize ändern AWT, Swing, JavaFX & SWT 5
lumo Swing Resize löst probleme...? AWT, Swing, JavaFX & SWT 12
A Swing JPanel mit GridBagLayout Resize-problem AWT, Swing, JavaFX & SWT 1
B JInternalFrame resize event AWT, Swing, JavaFX & SWT 2
T nach resize transparent weg AWT, Swing, JavaFX & SWT 4
I SWT komponenten resize AWT, Swing, JavaFX & SWT 4
J resize eines Bildes automatisch berechnen lassen? AWT, Swing, JavaFX & SWT 2
D JInternalFrame iconified Position nach parent-resize AWT, Swing, JavaFX & SWT 2
F Resize in ScrollPane AWT, Swing, JavaFX & SWT 4
M nachträglicher resize von frame AWT, Swing, JavaFX & SWT 6
A resize ohne anddauerndes repaint AWT, Swing, JavaFX & SWT 2
A resize ohne neu zu zeichnen AWT, Swing, JavaFX & SWT 8
C Swing und resize AWT, Swing, JavaFX & SWT 5
R Resize Problem bei JComponent AWT, Swing, JavaFX & SWT 2
P Resize von ScrollPane Inhalten AWT, Swing, JavaFX & SWT 2
A jtable resize AWT, Swing, JavaFX & SWT 6
R resize ImageIcon AWT, Swing, JavaFX & SWT 7
A GUI Komponenten verlieren Proportion bei resize (GBL) AWT, Swing, JavaFX & SWT 4
S Resize Event? AWT, Swing, JavaFX & SWT 2
K Image Resize + zu Byte [] konvertieren AWT, Swing, JavaFX & SWT 5
E Ärger mit ScrollPane, JTable und der Resize-Einstellung AWT, Swing, JavaFX & SWT 2
R JTable, automatischer resize der Zellen nach einer Eingabe AWT, Swing, JavaFX & SWT 4
B TableLayout - Resize Probleme AWT, Swing, JavaFX & SWT 2
R Autoresize eines Panel nach resize des Frames? AWT, Swing, JavaFX & SWT 3
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
Paty JFrame anfänger bräuchte hilfestellung AWT, Swing, JavaFX & SWT 7
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
Mausposition relativ zu JFrame bekommen AWT, Swing, JavaFX & SWT 6
sserio JFrame setIconImmage() funktioniert nicht AWT, Swing, JavaFX & SWT 3
N CPU Belastung bei offenem JFrame auf fast 100% AWT, Swing, JavaFX & SWT 15
N Knopf ganz oben (JFrame) AWT, Swing, JavaFX & SWT 9
N JFrame löscht alles, wenn groß gemacht AWT, Swing, JavaFX & SWT 9
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
N JFrame loescht alles, sobald der Thread zuende ist AWT, Swing, JavaFX & SWT 22
E JFrame resizing AWT, Swing, JavaFX & SWT 2
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Lunar Swing JFrame erstellt; weitere Elemente werden nicht eingefügt/sind nicht zu sehen AWT, Swing, JavaFX & SWT 4
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
L JFrame wird zu klein erstellt AWT, Swing, JavaFX & SWT 7
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

Ähnliche Java Themen

Neue Themen


Oben