PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java/Swing] auf Änderungen der Fenstergröße reagieren?


Gast
2007-04-23, 12:09:25
Hi Leute,

ich möchte in einem Swing-Programm auf Änderungen der Fenstergröße reagieren. Leider weiß ich nicht, welchen Listener ich dafür benutzen kann. WindowAdapter zumindest scheint keine dafür brauchbare Methode mitzubringen. Soweit ich das mitbekommen habe, ist es in Java üblich, für solche Zwecke LayoutManager zu verwenden, aber leider habe ich noch keinen gefunden, der die von mir benötigte Funktionalität bietet (BorderLayout hält sich nicht an die Anordnungsvorgaben, GridLayout macht alle Komponenten gleich groß, GridBagLayout ist zu kompliziert), daher muß ich das wohl von Hand machen. Könnt ihr mir einen Tip geben, welcher Listener resize-Events verarbeitet?

f.reischl
2007-04-23, 12:27:40
this.addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentResized(java.awt.event.ComponentEvent e) {
System.out.println("componentResized()");
}
});

Gast
2007-04-23, 12:36:03
hm, ist denn dieser ComponentListener nicht nur für solche Events da, die von Komponenten erzeugt werden und zum Hauptfenster geschickt werden? Das hieße dann ja, daß nur auf Größenänderungen von Komponenten reagiert wird, nicht auf Größenänderungen des Hauptfensters selbst?

f.reischl
2007-04-23, 14:00:50
this ist der Main-Frame, und das funktioniert auch bei mir einwandfrei.

Monger
2007-04-23, 15:07:56
Was genau willst du denn machen? Vielleicht gibt es ja wirklich einen eleganteren Weg für das was du suchst, den du bis jetzt einfach nicht siehst.

Sich mit dem Event Handling von Swing anzulegen, kann halt... hässlich werden.

Gast
2007-04-23, 21:35:52
wäre es nicht am einfachsten dem fenster das resizen zu verbieten?

Gast
2007-04-24, 12:25:08
Was genau willst du denn machen? Vielleicht gibt es ja wirklich einen eleganteren Weg für das was du suchst, den du bis jetzt einfach nicht siehst.hm, ich habe derweil mit TableLayout:

https://tablelayout.dev.java.net/

einen brauchbaren Layout-Manager gefunden.

Was ich machen wollte war eine Statusbar am unteren Fensterrand. Mit BorderLayout ging's nicht, da die Angabe BorderLayout.SOUTH zu oft ignoriert wird, mit GridLayout läßt sich die Höhe nicht einstellen, FlowLayout ist völlig ungeeignet, und GridBagLayout viel zu kompliziert.

Daher die Idee, auf Layout-Manager komplett zu verzichten und die Positionierung der Statusbar von Hand zu machen. Dazu muß die natürlich an Änderungen der Fenstergröße angepaßt werden.

Aber mit TableLayout geht's ja jetzt. Nur das Einfügen von Separatoren ist immer noch sehr widerwillig.

Gast
2007-04-24, 12:25:45
wäre es nicht am einfachsten dem fenster das resizen zu verbieten?wär ne Möglichkeit, aber nicht sehr elegant.

Monger
2007-04-24, 13:12:43
Was ich machen wollte war eine Statusbar am unteren Fensterrand. Mit BorderLayout ging's nicht, da die Angabe BorderLayout.SOUTH zu oft ignoriert wird...

Ich verwende zu so einem Zweck eigentlich auch immer BorderLayout, vorallem wenn ich mir irgendwelche Dialoge von Hand zimmern muss, und dann erzwingen will dass die Buttons immer am unteren Rand stehen. Bisher hatte ich damit nie Probleme, deshalb bin ich jetzt ein wenig überrascht, dass du sagst dass BorderLayout.South nicht funktioniert.