LayoutManager BorderLayout WEST Bereich auf maximale Größe beschränken

  • Themenstarter Themenstarter Gast2
  • Beginndatum Beginndatum
G

Gast2

Gast
Wie der Titel besagt möchte ich einer Komponente im WEST BEreich die Prefferd Width zugestehen BIS zu einem Maximalwert. Geht das irgendwie einfach?

setMaximumSize bewirkt da nichts.

Alternativ wäre eine Mindestgröße für das CENTER Component toll. setMiniumSize bewirkt da allerdings auch nichts.

Die WEST wird immer so breit wie sie will.

Bin leicht ratlos.
 
Ist es normalerweise nicht so, dass die Breite des WEST-Bereiches sich an der Breite dessen Inhaltes orientiert und der CENTER-Bereich dann den restlichen Platz einnimmt? Was kommt denn bei dir in WEST rein? Und mit welcher Grösse? Zeig doch mal dein Beispiel, vor allem die Festlegung der Grösse des WEST-Bereiches.
 
In meinen West Bereich kommt ein Panel rein, was theoretisch unendlich breit werden kann. Zumindest breiter als der Frame.

Ich möchte dessen Breite daher beschränken. Wenns nicht geht muss ich das anders lösen.

Im Center das gleiche Spiel. Größe unbekannt. Da es aber im Center ist aktivieren sich einfach die Scrollbars.

Das Panel im WEST BEreich soll AB einer maximalgröße dann auch eine hotizontale Scrollbar aktivieren. Diese ist zwar theoretisch da, da das Panel aber immer seine gewünschte Breite bekommt wird sie natürlich nie aktiviert.

Code ist relativ Witzlos, da die Panel Klassen wiederum zusammengesetzt sind ect. Ist eine recht Große GUI die sehr modular ist.

Wie gesagt stellt euch Panels mit ScrollPanes vor. Und der WEST soll in der Breite beschränkt werden.
 
Im Center das gleiche Spiel. Größe unbekannt. Da es aber im Center ist aktivieren sich einfach die Scrollbars.

Scrollbars? Von ganz alleine und automatisch in CENTER-Bereich??? Vielleicht solltest du für deinen WEST-Bereich eine Scrollpane einfügen und der die gewünschte Grösse geben.
 
Scrollbars? Von ganz alleine und automatisch in CENTER-Bereich??? Vielleicht solltest du für deinen WEST-Bereich eine Scrollpane einfügen und der die gewünschte Grösse geben.

Mein CENTER Component ist natürlich eine ScrollPane die dann falls zu wenig Platzd a ist, die Scrollbars anzeigt (AS_NEEDED).

Aber alles hin und her. Ist doch SCh***** egal welches Component im WEST drin ist.

Nochmal die Frage:

Kann ich BorderLayout irgendwie mitteilen, dass die WEST Component nicht breiter werden darf als X?
 
Wie gesagt dann muss ich 15 Klassen posten die aus dem Zusammenhang gerissen auch nicht kompiliertbar sind.

Fazit: Es gibt keinen einfachen Weg. Ich machs anders.
 
Wie schon weiter oben erwähnt, wird der WEST-Bereich so breit, wie die hinzugefügte Komponente. Wenn du da eine Scrollpane mit festgelegter Grösse reintust, dann sollte das eigentlich klappen. Da aber neimand erraten kann, wie du deine Komponenten nach WEST einfügst oder wie die Grössen dort festgelegt sind, wird dir auch niemand einfach so helfen können. Du musst ja nicht alles posten, sondern nur den relevanten Code. Zum Beispiel das BorderLayout, wo du deine Komponente in WEST einfügst...
 
Richtig! 😀

Aber noch etwas, wenn es da iwie nicht funktioniert und bevor es weiter das Problem gibt, frag das doch immer ab, wenn die Größe geändert wird.
Code:
Math.min(newSize.width, maximaleBreite);

Das kannst du entweder per Listener iwo machen, keine Ahnung, was du veränderst, oder du nimmst halt dieses Panel, was in West liegt und machst daraus einfach ne KindKlasse von JPanel und änderst setSize() ab. Das sieht dann so aus.

Java:
final int maxWidth = 30;
JPanel parent = new JPanel(new BorderLayout());

JPanel westPanel = new JPanel(){
    @Override
    public void setPreferredSize(Dimension d){
        super.setPreferredSize(new Dimension(Math.min(d.width, maxWidth), d.height));
    }
};

parent.add(westPanel, BorderLayout.WEST);

So kann man es sich vorstellen oder du versuchst es, wie die andren vorschlagen, auf die leichte Tour:

Java:
final int maxWidth = 30;
JPanel parent = new JPanel(new BorderLayout());

JPanel westPanel = new JPanel();
westPanel.setMaximumSize(new Dimension(maxWidth, 0));

parent.add(westPanel, BorderLayout.WEST);

Hoffe, ich konnte helfen
Gruß, Thomas
 

Zurück
Oben