C
cRacKheAd
Gast
hallo leute,
ich schreib grad ne gui, die ein Borderlayout verwendet.
Dabei möchte ich aber, dass das Panel, welches ich rechts einfüge,
immer ein viertel der Fensterbreite einnimmt.
Dazu hab ich dem ContentPane einen ComponentListener hinzugefuegt,
welcher bei einem Resize die Groesse anpassen soll.
Das funktioniert aber leider nicht, wenn man durch einen Doppelklick
auf die Titelleiste resized. Diese Funktion würde ich aber gern drin
behalten...
So wie ich das sehe, liegt das wohl daran, dass die getWidth-Methode des ContentPanes
die neue Groesse erst nach dem Layouten liefern kann, das ResizeEvent wird offenbar
jedoch schon vorher gefeuert, weswegen das rechte panel dann bei doppelklick ein viertel von der
alten breite nimmt.
Bitte führt mal das folgende SSCCE aus und seht euch den Bug an. vllt kann mir jemand sagen, wie ich
an die neue Groesse des ContentPanes kommen kann?
vielen Dank für Anregungen!
ich schreib grad ne gui, die ein Borderlayout verwendet.
Dabei möchte ich aber, dass das Panel, welches ich rechts einfüge,
immer ein viertel der Fensterbreite einnimmt.
Dazu hab ich dem ContentPane einen ComponentListener hinzugefuegt,
welcher bei einem Resize die Groesse anpassen soll.
Das funktioniert aber leider nicht, wenn man durch einen Doppelklick
auf die Titelleiste resized. Diese Funktion würde ich aber gern drin
behalten...
So wie ich das sehe, liegt das wohl daran, dass die getWidth-Methode des ContentPanes
die neue Groesse erst nach dem Layouten liefern kann, das ResizeEvent wird offenbar
jedoch schon vorher gefeuert, weswegen das rechte panel dann bei doppelklick ein viertel von der
alten breite nimmt.
Bitte führt mal das folgende SSCCE aus und seht euch den Bug an. vllt kann mir jemand sagen, wie ich
an die neue Groesse des ContentPanes kommen kann?
vielen Dank für Anregungen!
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
@SuppressWarnings("serial")
public class ResizeTestFrame extends JFrame {
private JPanel centerPanel;
private JPanel rightPanel;
public ResizeTestFrame() {
centerPanel = new JPanel();
centerPanel.setBackground(Color.GREEN);
rightPanel = new JPanel();
rightPanel.setBackground(Color.RED);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(BorderLayout.CENTER, centerPanel);
getContentPane().add(BorderLayout.EAST, rightPanel);
// resize-Action
getContentPane().addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent ce) {
// breite: ein viertel des fensters
rightPanel.setPreferredSize(new Dimension(getContentPane()
.getWidth() / 4, 0));
repaint();
}
});
// sontiger kram
setDefaultCloseOperation(EXIT_ON_CLOSE);
setPreferredSize(new Dimension(300, 450));
rightPanel.setPreferredSize(new Dimension(75, 0));
pack();
setLocationRelativeTo(null);
}
/**
* Oeffnet die TestGUI.
*
* @param args
* keine args
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ResizeTestFrame().setVisible(true);
}
});
}
}