# setPreferredSize - nur in einer Richtung setzen?



## richardcurtle (21. Mrz 2009)

Hi,

Ich will einen Dialog der von mir nur eine prefWidth erhaelt. Die Height soll sich aus pack() ergeben.

so etwa:

dialog.setPreferredSize(new Dimension(800, -1)); 
dialog.pack();

nur geht halt -1 nicht


----------



## diggaa1984 (21. Mrz 2009)

werden die komponenten durch eine preferredWidth in dem Sinne gestreckt oder bleiben die normal, weil wenn sie normal bleiben, ruf einfach pack auf und setz danach die Breite neu


----------



## icarus2 (21. Mrz 2009)

Nun ja, das Fenster kann ja auch nicht -1 Pixel gross sein... Da muss schon eine Zahl > 0 rein denke ich.

Machs doch einfach so:


```
dialog.setMinimumSize(new Dimension(800,1));
dialog.setMaximumSize(new Dimension(800,1000));
```

Wenn du das so eingibst, dann wird bei pack() irgend eine Höhe genommen, die gerade Passt, wobei die Breite immer 800 Pixel beträgt. Kannst natürlich immer noch eine .setPrefferedSize() reintun.


----------



## richardcurtle (21. Mrz 2009)

diggaa1984 hat gesagt.:


> werden die komponenten durch eine preferredWidth in dem Sinne gestreckt oder bleiben die normal, weil wenn sie normal bleiben, ruf einfach pack auf und setz danach die Breite neu



Guter Punkt. Hmm...glaube nur das in manchen faellen das pack() raeumlich (in einer anderen Klasse) von Panel-Initialisierungscode ist.

Es ist einfach schade, dass es keine 2 Methoden: setPrefWidth und setPrefHeight gibt. Oder gibt es vielleicht eine Methode:

calculatePrefSize(jcomponent) ??? Irgendwie berechnet pack() ja genau das.


----------



## richardcurtle (21. Mrz 2009)

icarus2 hat gesagt.:


> Nun ja, das Fenster kann ja auch nicht -1 Pixel gross sein... Da muss schon eine Zahl > 0 rein denke ich.
> 
> Machs doch einfach so:
> 
> ...



Kleiner Hack aber koennte klappen. Hab nur Angst, dass das nie so gedacht war und dann irgendwann in Spezialfaellen nach hinten losgeht (z.B. Panel steckt in Layoutmanager der max/min Size sehr wichtig nimmt).


----------



## Marco13 (21. Mrz 2009)

Auch da könnte man mit einem kleinen Workaround arbeiten...

```
JDialog dialog = new JDialog()
{
    public Dimension getPreferredSize()
    {
        Dimension dim = super.getPreferredSize();
        dim.width = 800;
        return dim;
    }
}
```
Solche anonymen Überschreibungen sind aber mit Vorsicht zu genießen (eine echte Alternative, die GENAU dieses Verhalten hat, wüßte ich aber nicht...)


----------



## diggaa1984 (23. Mrz 2009)

richardcurtle hat gesagt.:


> calculatePrefSize(jcomponent) ??? Irgendwie berechnet pack() ja genau das.



nen derartiges Calculate is mir mal beim GridBagLayout ganz entgegen gekommen 
vielleicht ham andere LayoutManager auch sowas?!


----------



## Marco13 (23. Mrz 2009)

AFAITK hat jeder LayoutManager die Methode "preferredLayoutSize"...


----------



## diggaa1984 (23. Mrz 2009)

Marco13 hat gesagt.:


> AFAITK ...


As Far As I that know ? :bahnhof: 

aber ich traue dir bessere englischkenntnisse zu


----------

