setResizable(false) ändert Größe des Contentpane

jemandzehage

Aktives Mitglied
Hallo,

ich habe folgendes Problem. Ich habe ein JFrame, in das einige Panels etc. hinein kommen sollen und das Fenster soll eine feste größe haben. Das geht ja einfach mit setResizable(false). Wenn ich diesen befehl aufrufe, wird das Fenster um 10 Pixel vergrößert. Interessanterweise verändert sich nicht die Größte des JFrames, sondern die größe des Contentpanes. Woran liegt das?? und wie kann ich das verhindern??

Hier mal der Code:
Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class ResizableTest implements MouseListener{
	private JFrame frame;
	
	public ResizableTest() {
		frame = new JFrame("Resize Test");
		frame.setVisible(true);
		
		Container c = frame.getContentPane();
		c.setLayout(new BorderLayout());
		
		JPanel panel1 = new JPanel();
		panel1.setPreferredSize(new Dimension(300, 300));
		
		c.add(panel1, BorderLayout.CENTER);
		
		frame.addMouseListener(this);
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		frame.pack();
		frame.requestFocus();
	}

	@Override
	public void mouseClicked(MouseEvent e) {}

	@Override
	public void mouseEntered(MouseEvent e) {}

	@Override
	public void mouseExited(MouseEvent e) {}

	@Override
	public void mousePressed(MouseEvent e) {
		System.out.println("start mousePressed");
		System.out.println("Frame size: " + frame.getWidth() + "|" + frame.getHeight());	
		System.out.println("Contentpane size: " + frame.getContentPane().getWidth() + "|" + frame.getContentPane().getHeight());
		
		System.out.println("frame.setResizable(" + !frame.isResizable() + ");");
		frame.setResizable(!frame.isResizable());
		
		System.out.println("Frame size: " + frame.getWidth() + "|" + frame.getHeight());
		System.out.println("Contentpane size: " + frame.getContentPane().getWidth() + "|" + frame.getContentPane().getHeight());
		System.out.println("end mousePressed");
	}

	@Override
	public void mouseReleased(MouseEvent e) {}
	
	public static void main(String[] args) {
		new ResizableTest();
	}
}

Ich danke für Hilfe!!
 

Ebenius

Top Contributor
Das hängt vom verwendeten System ab. Offensichtlich werden auf Deinem System Fenster mit unveränderlicher Größe mit einem anderen Rahmen ausgestattet. Da die Hohheit über diese Entscheidung im System hängt, kannst Du das eigentlich nicht verhindern. Du kannst das LookAndFeel das Fenster dekorieren lassen; sofern das jeweilige LAF diese Funktion unterstützt: [c]JFrane.setDefaultLookAndFeelDecorated(true)[/c]. Oder Du rufst [c]pack()[/c] neu auf; dann wird die Fenstergröße geändert anstatt die Größe des ContentPane.

Zu Deinem Beispiel: [c]setVisible(true)[/c] sollte man grundsätzlich nach dem Initialisieren des Frames machen. Das ergibt sich allerdings automatisch, da man das ohnehin niemals im Konstruktor macht. Das Anzeigen (sichtbar setzen) sollte man einfach immer dem Aufrufenden überlassen. Außerdem sollte eine GUI immer auf dem EDT erzeugt werden, sonst wird's öfter mal unerklärliche Probleme geben (besonders wenn man mal eine nicht-Sun-Maschine verwendet):
Java:
/** Creates the GUI. Call on EDT, only! */
static void createAndShowGui() {
  new ResizableTest().setVisible(true);
}

/** @param args ignored */
public static void main(String[] args) {
  SwingUtilities.invokeLater(new Runnable() {

    public void run() {
      createAndShowGui();
    }
  });
}

Ebenius
 

jemandzehage

Aktives Mitglied
Ich danke für die Antwort und auch für die weiteren Tipps. Ich hab das nur schnell zusammengebastelt um mein Problem darzustellen. Aber das mit dem EDT war mir nicht bekannt, dass man das so macht, also nochmals danke.

Ich hätte da noch eine Lösungsidee, aber ich weiß nicht ob das Sinnvoll ist. Was ist, wenn man int das Contentpane einen ComponentListener hängt, der überwacht wenn sich die Größe ändert und sobald die größe geändert wird, dann setzt er sie wieder zurück zu seinen vorherigen größe. (abgesehen vom ersten mal, wenn die größe quasi initialisiert wird) . Ist soetwas sinnvoll??
 

Ebenius

Top Contributor
Die Hohheit über die Größe einer Komponente hat eigentlich die Elternkomponente. Insofern würde ich diesen Ansatz eher nicht verfolgen.

Ebenius
 

jemandzehage

Aktives Mitglied
Ich habs trotzdem weiter verfolgt, aber nur mit mäßigem Erfolg. Weil wenn ich im ComponentListener bei resize() die Größe ändere folgt darauf ein Rekursions-Vorgang, da duch die größenänderung wieder resize() aufgerufen wird. Am einfachsten ist es damit:

Java:
JFrame.setDefaultLookAndFeelDecorated(true)

Sieht natürlich im Betriebssystem nicht ganz so schick aus. Trotzdem danke!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing "Frame.setResizable(false);" verschiebt Content? AWT, Swing, JavaFX & SWT 9
T Swing JFrame setResizable: Kurzer Fokusverlust? AWT, Swing, JavaFX & SWT 3
G JDialog.setResizable() - Problem AWT, Swing, JavaFX & SWT 2
A jtabbedpane und setresizable AWT, Swing, JavaFX & SWT 5
K setResizable() funzt nich AWT, Swing, JavaFX & SWT 3
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
_user_q Objekt.setSelected(false), wenn es nicht mehr fokussiert wird AWT, Swing, JavaFX & SWT 2
_user_q ThreadPool schedule Wert auf false setzen AWT, Swing, JavaFX & SWT 1
L LookAndFeel JInternalFrame aussehen isSelected() true vs false AWT, Swing, JavaFX & SWT 0
F AWT requestFocusInWindow returns false on ubuntu AWT, Swing, JavaFX & SWT 0
P jframe setVisible(false) wieder sichtbar machen? AWT, Swing, JavaFX & SWT 4
H Swing Keine Rückmeldung (freeze) bei setVisible(false) oder dispose() AWT, Swing, JavaFX & SWT 4
J Swing JMenuItem auf setEnabled(false) setzen? AWT, Swing, JavaFX & SWT 3
K 2D-Grafik interstectsLine gibt immer false zurück AWT, Swing, JavaFX & SWT 18
Oliver530 JButton setEnabled(false) ohne Farbverlust AWT, Swing, JavaFX & SWT 3
G Swing JCheckBox, setEnabled(false) und HTML Text Problem AWT, Swing, JavaFX & SWT 5
0 JTextPane copy/paste trotz editable(false) ? AWT, Swing, JavaFX & SWT 10
R Button soll nach dem er gedrückt wurde auf setVisible(false) gestellt werden. AWT, Swing, JavaFX & SWT 3
R Swing jbutton.setEnabled(false) ohne Ausgrauung des Buttons? AWT, Swing, JavaFX & SWT 6
M JTable, editCellAt liefert false AWT, Swing, JavaFX & SWT 4
C Swing JCheckBox setEditable(false)? AWT, Swing, JavaFX & SWT 9
D setEnabled(false); Problem AWT, Swing, JavaFX & SWT 25
R Swing JDialog liefert immer false, 2 JListen verknüpfen AWT, Swing, JavaFX & SWT 3
L Swing setVisible(false) bei GridBagLayout - wie Layoutverschiebung verhindern? AWT, Swing, JavaFX & SWT 2
F JCombobox zwischen setEditable true und false switchen AWT, Swing, JavaFX & SWT 2
D CTabFolder.setSimple(false) AWT, Swing, JavaFX & SWT 8
P JPanel: setOpaque(false) funktioniert nicht AWT, Swing, JavaFX & SWT 27
O JPanel.setEnabled(false); auf Kindelemente funzt net? AWT, Swing, JavaFX & SWT 6
DeeDee0815 JEditorPane + HTML + <img src=file> + JAR = FALSE AWT, Swing, JavaFX & SWT 3
S JTable - clearSelection() + setEditable(false) AWT, Swing, JavaFX & SWT 5
G JFrame.setVisable(false) AWT, Swing, JavaFX & SWT 6
U JTable.setEnabled(false) funktioniert nicht ! AWT, Swing, JavaFX & SWT 3
V JComboBox.setEnabled(false) AWT, Swing, JavaFX & SWT 4
G JTree - isLeaf auf false setzen AWT, Swing, JavaFX & SWT 6
A JInternalFrame setMaximizeable(false) wehrt sich AWT, Swing, JavaFX & SWT 2
S Mehere Componenten setEnabled(false) in JToolBar AWT, Swing, JavaFX & SWT 4
P ProgressMonitor - isCanceled gibt immer false zurück AWT, Swing, JavaFX & SWT 2
D JDialog: kein Icon nach setResizeable(false) AWT, Swing, JavaFX & SWT 5
S Ganze Fenster auf setVisible(false) setzen AWT, Swing, JavaFX & SWT 2
A setBorderPainted(false) funktioniert nicht AWT, Swing, JavaFX & SWT 3
M Farbe bestimmen, wenn JTextField.setEnabled(false) AWT, Swing, JavaFX & SWT 6
Kotelettklopfer Frame ändert Farbe nicht AWT, Swing, JavaFX & SWT 12
K JavaFX Fenstergröße ändert sich (Gluon - SceneBuilder) AWT, Swing, JavaFX & SWT 23
C Swing JFrame ändert Größe AWT, Swing, JavaFX & SWT 0
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
A Swing Fenster ändert Position bei Mausklick nicht AWT, Swing, JavaFX & SWT 2
2 JLabel - setText ändert den Text nicht AWT, Swing, JavaFX & SWT 4
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
L JDialog - Event wenn Parent größe ändert AWT, Swing, JavaFX & SWT 2
S Look und Feel ändert sich nicht AWT, Swing, JavaFX & SWT 4
R Ellipse2D ändert Größe AWT, Swing, JavaFX & SWT 3
F JFrame nach Buttonklick 3 Sekunden warten, bevor es sich ändert AWT, Swing, JavaFX & SWT 2
V Labeltext ändert sich nicht in actionPerformed AWT, Swing, JavaFX & SWT 5
R LookAndFeel Nimbus ändert Programmausführung AWT, Swing, JavaFX & SWT 8
M Swing JScrollPane ändert ungewollt seine Größe AWT, Swing, JavaFX & SWT 2
K LookAndFeel Look And Feel ändert sich nicht AWT, Swing, JavaFX & SWT 8
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
A Swing TableCellRenderer ändert die Zeilenfarbe zu spät AWT, Swing, JavaFX & SWT 3
E Swing JLabel ändert seine Position nach setText AWT, Swing, JavaFX & SWT 2
M JWindow schließen wenn Frame sich ändert AWT, Swing, JavaFX & SWT 2
B LayoutManager JLabel ändert GridBayLayout-Gewichtung AWT, Swing, JavaFX & SWT 2
M JTextArea ändert Schreibrichtung AWT, Swing, JavaFX & SWT 5
S JSplitPane ändert Farbe nicht AWT, Swing, JavaFX & SWT 4
O Hgr- Farbe einer JTable ändert sich nicht AWT, Swing, JavaFX & SWT 11
G labeltext ändert sich nicht AWT, Swing, JavaFX & SWT 28
S JList inhalt ändert sich wie nennt sich ereignis/methode? AWT, Swing, JavaFX & SWT 3
S 1 Klick für JButton und Layout ändert sich AWT, Swing, JavaFX & SWT 14
L Button ändert eigenes Bild und Progressbar-Value nicht AWT, Swing, JavaFX & SWT 6
K JTextArea ändert Größe. AWT, Swing, JavaFX & SWT 3
S GUI ändert Größe AWT, Swing, JavaFX & SWT 9
R JTextField im GridBag ändert seine Größe nicht AWT, Swing, JavaFX & SWT 11
B JLabel ändert seine Position AWT, Swing, JavaFX & SWT 7
D CheckBox ändert Status nur, wenn sie FocusOwner ist AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben