Swing "Frame.setResizable(false);" verschiebt Content?

mac21

Aktives Mitglied
Hallo zusammen,

wieder einmal ist ein kleines Problem aufgetaucht, auf das ich keine Lösung fand...
für mein Derzeitiges OCR-Projekt lade ich ein Bild als Hintergrund in ein ImagePanel.
Dieses ImagePanel befindet sich in einem JFrame. (Neben 2 weiteren, normalen JPanels)

Klasse ImagePanel (auf das nötigste beschränkt:
Java:
public ImagePanel{

public ImagePanel(int width, int height, BufferedImage image, GUI gui) {
		
		if(image != null) {this.image = resizeThumb(image);}
	    this.width = width;
	    this.height = height;
	    this.gui = gui;
	    this.addMouseMotionListener(this);
	    this.addMouseListener(this);
	    this.setFocusable(true);
	    
	    gui.mainFrame.addKeyListener(this);
	}

public void paintComponent(Graphics g) {
		super.paintComponent(g);
		if (image != null) {
			g.setColor(Settings.CELLCOLOR);
			g.drawImage(image, 0, 0, width, height, this);
			for(int i = 0; i < rectangles.length; i++) {
				g.drawRect( (int)rectangles[i].getX(), (int)rectangles[i].getY(), (int)rectangles[i].getWidth(), (int)rectangles[i].getHeight());
			}
		}
	}
}

Das ganze sieht dann so aus:
vorher.jpg

Nun ist mir aufgefallen, dass mein JFrame (also mein komplettes GUI) zwar eine feste Größe hat (das war so vorgegeben), diese jedoch veränderbar ist.
Klar, ich bin ja nicht blöd: mainFrame.setResizable(false);

Dann kommt leider folgendes Ergebnis dabei heraus:

nachher.jpg

Wenn man die Bilder direkt vergleicht stellt man fest:
- Nachher ist der Frame einige Pixel höher.
- Auch die Screenshots die ich mit shift-druck (also nur das aktuelle Fenster) gemacht habe unterscheiden sich in der Pixelzahl.
- Des Weiteren verschieben sich die JPanels und deren Inhalte.

Woran könnte das liegen?

Ich kann, falls nötig, gerne auch die kompletten Sourcecodes hochladen,
wird dann nur viel Arbeit sein, alles zu analysieren...

Danke schon mal!
 

X5-599

Top Contributor
Ich fürchte da kannst du wenig machen. das Frame#setResizable(boolean) bedient sich irgendwann bei einer nativen Methode. Man hat also (meines Wissens nach) ab da keine Möglichkeit mehr auf etwas Einfluss zu nehmen.
 

mac21

Aktives Mitglied
Hallo X5-599,
interessanter nick, btw.

Danke für deinen Beitrag.
Auf diese "Lösung" bin ich schon in vielen Threads gestoßen, im Forum sowie anderen Quellen über google.
Viele Threads waren schon Jahre alt, von daher habe ich gehofft, es gibt "mittlerweile" eine "Lösung".
Leider habe ich sämtliche Frames und Panels mit "setLayout(null)" geschrieben und Location und Size manuell festgelegt,
die die Anwendung eine vorgegebene Pixelbreite und -höhe besitzen sollen.

Leider habe ich auch noch keine Erfahrung mit Layoutmanagern. Habe nur ein wenig rumgespielt... kam aber zu keinem sinnvollen Ergebnis.

Hast du evtl. einen Tipp für mich, WELCHES Layout ich für das in den o.g. Bildern zu sehende Layout verwenden soll?

Mit BorderLayout kam ich nicht klar, da dieses ja in 5 Bereiche (N, O, S, W, und center) geteilt wird. Mein Layout passt in dieses Schema nicht rein...


Ich hatte experimentiert mit einem FlowLayout im JFrame.
Ich habe den drei JPanels jeweils feste Maße gegeben, jedoch keine Location.
Dann fügte ich diese Panels dem JFrame hinzu, in der Hoffnung, diese würden (aufgrund Ihrer Maße) selbst richtig geordnet werden.

Ergebnis: das grüne Panel, das rechts am Rand sein sollte, war etwa 10 Pixel breite und am linken Rand.
Alles andere war weiß...
beide anderen Panels fehlten einfach...
 

kaoZ

Top Contributor
setzt du bei deinem Frame irgendwo ein .pack() ? und wenn ja vor oder nachdem du das Fenster per .setResizeable(false); unveränderbar gemacht hast ? das macht nämlich nen unterschied und zwar einen unterschied von ca 10 - 15 pixeln :)
 
Zuletzt bearbeitet:

Joose

Top Contributor
Hier einige Links zu LayoutManagern:

Wikipedia -Layoutmanager
tutorialspoint - Swing Layouts
Oracle Tutorial Layouts

LayoutManager können auch verschachtelt werden, so werden "sehr komplexe" Layouts möglich, aber entsprechend komplex ist es dann die Komponenten richtig aufeinander abzustimmen.

Ich glaube in deinem Fall sollte ein GridBagLayout reichen.
2 Spalten und 2 Reihen:
1.Reihe + 1.Spalte = Panel 1
2.Reihe + 1.Spalte = Panel 2
1.+2.Reihe + 2.Spalte = Panel 3
 

mac21

Aktives Mitglied
Hallo Joose,
und auch in diesem Thread wieder ein "herzlichen Dank".

Unter dem 3. Link
fand ich eine super Beschreibung mit Beispiel.

Wenn ich ein Panel in ein Frame hinzufüge,
zb
Java:
GridBagConstraints c = new GridBagConstraints();
JPanel p = new JPanel();
p. ...
p. ...
p.set ...
...
JFrame.(p, c);

1. Dann gebe ich meiner Komponente (in diesem Fall JPanel p) KEINE Größe und KEINE Position mit?
Diese richtet sich automatisch nach der Gridgröße aus?

2. Wenn ich das richtig verstanden habe, ist das FlowLayout das Standard-Layout?
Füge ich nun noch ein zweites JPanel p2 hinzu, per
Java:
JFrame.(p2, c);

Ist das JPanel p2 nun NEBEN oder UNTER meinem JPanel p?
Beiden haben weder Größe noch Position vorgegeben.
 

X5-599

Top Contributor
Also Layouts sind auch nicht so meine Welt. Sorry. Aber das was kaoZ geschrieben hat funktionierte bei mir. Es hat tatsächlich eine Auswirkung ob das setResizable() vor oder nach dem pack() passiert.
Wenn setResizable() vor dem pack() steht, ändert das Fenster seine Grösse nicht. Es ist dann genauso gross wie als wenn es resizable wäre...
 

mac21

Aktives Mitglied
Okay kein Thema,
man kann ja nicht alles wissen ;)

das Problem dabei ist, dich rufe gar kein "pack()" auf..
da ich vorher alle Positionen und Größen hardgecoded habe...
 

kaoZ

Top Contributor
Wenn du feste Größen verwendest, zieht das toolkit, wie bei einem zu früh Gesetzen pack() augenscheinlich die Pixel für die Rahmen ab, also musst du dies beim setzen der bounds beachten, mal abgesehen davon ist das arbeiten mit null Layout = Evil ;)
 
Zuletzt bearbeitet:

mac21

Aktives Mitglied
Hallo kaoZ,

danke für die Info,
da ich auch noch relativ wenig mit Layoutmanagern gemacht habe, somit kein pack() verwendet habe,
ist mir dieses Phänomen noch nicht unter gekommen.
Bei meinen bisherigen "Programmen" war es kein Problem, das Fenster größer zu ziehen.
Doch dieses mal sollen bestimmte Inhalte, zB. ein Panel, eine feste Pixelbreite haben.
Ich werde das Projekt mal pausieren,
mich in die Layouts einlesen und das ganze mit einem neuen UI versehen.

Vielen Dank für die Hilfe!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Fragerjava Frame inhalt komplett löschen AWT, Swing, JavaFX & SWT 4
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
Kotelettklopfer Frame ändert Farbe nicht AWT, Swing, JavaFX & SWT 12
P Swing Zufallsbilder auf Frame ausgeben AWT, Swing, JavaFX & SWT 1
D AWT Wie kann ich ein Frame von einem anderen aus beeinflussen? AWT, Swing, JavaFX & SWT 7
R 2D-Grafik Massive Frame Drops beim Benutzen von AffineTransformOp AWT, Swing, JavaFX & SWT 2
C Swing F5 Taste neu laden auf ganzen Frame AWT, Swing, JavaFX & SWT 9
J Genutzte Methoden in einen Frame einbauen AWT, Swing, JavaFX & SWT 21
H Swing Frame an andere Klassen weitergeben AWT, Swing, JavaFX & SWT 4
olfibits Swing JavaFX-Frame in JDesktopPane darstellen? AWT, Swing, JavaFX & SWT 2
F Swing Frame nach vorne holen AWT, Swing, JavaFX & SWT 2
J Panel auf Frame positionieren AWT, Swing, JavaFX & SWT 9
K Frame aus anderer Klasse schließen AWT, Swing, JavaFX & SWT 3
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
S Tastatur frame nur nur 1 mal öffnen AWT, Swing, JavaFX & SWT 1
T Swing Java-Frame bei Programmstart NICHT im Vordergrund öffnen AWT, Swing, JavaFX & SWT 2
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
T Frame öffnet nicht AWT, Swing, JavaFX & SWT 1
A Swing GUI - Button soll Frame verändern AWT, Swing, JavaFX & SWT 4
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
S mit keylistener frame schliessen AWT, Swing, JavaFX & SWT 8
Thallius Wer oder was bestimmt welches Frame toFront kommt wenn ein anderes geschlossen wird? AWT, Swing, JavaFX & SWT 8
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
J Panel auf Frame löschen und neues Panel Hinzufügen AWT, Swing, JavaFX & SWT 4
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
S NetBeans, Panel in Frame einfügen AWT, Swing, JavaFX & SWT 3
M Internal Frame in den vordergrund AWT, Swing, JavaFX & SWT 4
Tausendsassa Frame öffnet aber zeigt keinen Inhalt... AWT, Swing, JavaFX & SWT 10
Tom299 JavaFX Ähnliche Komponente wie der VB6 Frame? AWT, Swing, JavaFX & SWT 2
L Swing Frame in Thread wird nicht gezeichnet AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
D Buttons erscheinen nicht auf Frame AWT, Swing, JavaFX & SWT 2
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
B Frame hängt sich auf trotz invokeLater AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
M JavaFX wie kann mann sein frame mit einem Icon fersehen? AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
P Frame friert ein AWT, Swing, JavaFX & SWT 6
Z Frame mit Rechteck! AWT, Swing, JavaFX & SWT 16
Messoras JWindow/Frame durch das man durchklicken kann AWT, Swing, JavaFX & SWT 5
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
J JTable aktuallisieren über anderen Frame AWT, Swing, JavaFX & SWT 6
J JTable Zeile anklicken und neues Frame öffnen AWT, Swing, JavaFX & SWT 4
S Quadrat auf Frame zeichnen AWT, Swing, JavaFX & SWT 2
B JFrame immer an gleicher stelle auf anderem Frame AWT, Swing, JavaFX & SWT 5
F JAVA-EDITOR: Panel in Frame aufnehmen AWT, Swing, JavaFX & SWT 3
B Swing JMenuBar unten in der Frame setzen? AWT, Swing, JavaFX & SWT 15
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
D Buttons erscheinen nicht auf dem zweiten Frame AWT, Swing, JavaFX & SWT 4
X Swing Größe eines Fensters JFrame / Frame AWT, Swing, JavaFX & SWT 5
BRoll Frame- Video einbinden machbar? AWT, Swing, JavaFX & SWT 6
Kandum obj_JMenu.addMenuListener - variable Anzahl an JMenus / menulistenern & frame.setTitle() dynamisch AWT, Swing, JavaFX & SWT 7
B Frame always on top nur auf anderem Frame AWT, Swing, JavaFX & SWT 9
S Aufteilung von JPanels in einem Frame AWT, Swing, JavaFX & SWT 13
K Options-Frame integrieren (zum zuschalten und wegschalten wie geht man da ran? AWT, Swing, JavaFX & SWT 7
J Frame mit Button erstellen - Warum ist es nötig, Frame über Unterklasse zu erstellen? (Reg Listener) AWT, Swing, JavaFX & SWT 2
N Swing Endlosschleife blockt Frame AWT, Swing, JavaFX & SWT 11
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
N Swing Frame ungewollt transparent! AWT, Swing, JavaFX & SWT 2
J Kleines Anzeige Problem(nur blanker Frame) AWT, Swing, JavaFX & SWT 22
D Neues Frame öffnen - und dazu altes schließen AWT, Swing, JavaFX & SWT 5
Daniel_L Drop von Dateien auf Frame - welche Drop-Location? AWT, Swing, JavaFX & SWT 2
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
C LookAndFeel Frame updated nicht vollständig AWT, Swing, JavaFX & SWT 9
K 3D-Grafik Canvas ist ein eigener Frame?! AWT, Swing, JavaFX & SWT 13
L Jbutton + jcombobox mit vorhandenen frame verknüfen AWT, Swing, JavaFX & SWT 8
J 2 Bereiche im Frame komplett nutzen - Welchen Layoutmanager? AWT, Swing, JavaFX & SWT 3
Z Swing JTextfield auf Frame AWT, Swing, JavaFX & SWT 13
N Swing Frame mit GlassPane und Popup AWT, Swing, JavaFX & SWT 5
L Frame Schließen und neustarten AWT, Swing, JavaFX & SWT 4
L Mehre Panels einen Frame zuweisen AWT, Swing, JavaFX & SWT 11
P Frame "always on top" und welche GUI? AWT, Swing, JavaFX & SWT 5
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
S JMenuBar Frame Abstand AWT, Swing, JavaFX & SWT 3
J Swing Frame öffnen aus Frame mit JButton AWT, Swing, JavaFX & SWT 2
X Alte Frame-Größe beim wiederholten Aufruf AWT, Swing, JavaFX & SWT 5
M erstes Frame wartet auf die Auswertung eines zweiten AWT, Swing, JavaFX & SWT 8
J Frame-Steuerelement AWT, Swing, JavaFX & SWT 2
L Swing Flackern in Frame bei erstem Klick AWT, Swing, JavaFX & SWT 19
F Hintergrundbild im Frame AWT, Swing, JavaFX & SWT 11
S Zeichnen führt zu transparentem Frame AWT, Swing, JavaFX & SWT 6
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
B Frame im Frame? AWT, Swing, JavaFX & SWT 4
C WindowListener Frame AWT, Swing, JavaFX & SWT 8
P klassenübergreifendes Frame AWT, Swing, JavaFX & SWT 6
B Text soll nich über das Frame hinausgehen AWT, Swing, JavaFX & SWT 5
J Hintergrund Label-Frame AWT, Swing, JavaFX & SWT 3
Spin JFrame/ Frame Drag and Drop AWT, Swing, JavaFX & SWT 13
S Swing Panelgröße anpassen wenn Frame maximiert wird AWT, Swing, JavaFX & SWT 2
K MouseListener für Objekte auf einem Frame AWT, Swing, JavaFX & SWT 4
3 Eigenes Frame/Window programmieren AWT, Swing, JavaFX & SWT 2
A Hintergrund von einem Frame ändern AWT, Swing, JavaFX & SWT 3
D Mehrere JTabel in einem Frame positionieren AWT, Swing, JavaFX & SWT 5
M Im Frame wird nur die Menüleiste erstellt und nicht die Tabelle? AWT, Swing, JavaFX & SWT 3
N Swing außerhalb des Hauptframe Komponente/Frame öffnen AWT, Swing, JavaFX & SWT 2
T Mehrere sich bewegende Objekte in einem Frame AWT, Swing, JavaFX & SWT 14
J "Warte Frame" AWT, Swing, JavaFX & SWT 3
K Swing JDialog aus Frame ausrufen AWT, Swing, JavaFX & SWT 2
M Swing Dynamischer Frame AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben