# Bild in JPanel verschiebt Layout. Wie fixieren?



## dond0me (16. Nov 2011)

Hallo Communitiy!


Ich möchte je nach Auswahl in einer ComboBox ein bestimmtes Bild in einem JPanel ausgeben. 
Ich habe gelesen,dass das am besten geht, wenn man auf den Panel ein Label legt und das Image an dieses gibt. Gemacht getan. Funktioniert auch an sich.

Leider verschiebt es mir mit dem Laden mein Layout.

Habe sowohl im Label, als auch im Panel die maximumSize (+ prefferedSize) angegeben. Es ändert aber nicht an meinem Problem.


Hier der Code:



```
private void jComboBoxAvatarAuswahlActionPerformed(java.awt.event.ActionEvent evt) {                                                       
        String avatar = jComboBoxAvatarAuswahl.getSelectedItem().toString();
        System.out.println("Ausgewählter Avatar ist: " + avatar);

       if (avatar.toUpperCase().equals(norman.toUpperCase()) == true){
                   jLabelPicLabel.setIcon(new javax.swing.ImageIcon(pathNorman));
       }
       else if (avatar.toUpperCase().equals(avatar2.toUpperCase())== true){
           jLabelPicLabel.setIcon(new javax.swing.ImageIcon(pathAvatar2));
       }
       else {
           System.out.println("Fehler beim Laden des Bildes.");
       }
        jLabelPicLabel.setText("");
        jPanelAvatarBild.setVisible(true);

    }
```

pathNorman und pathAvatar2 sind Strings die den Pfad zu den jeweiligen Bilder beinhalten. Beides sind .png Dateien.



Desweiteren wird neben dem Bild ein Leerraum bis zum Rand des Panels ausgegeben. Den will ich auch nicht.

Leider kann ich euch keine Screenshots hoch laden, da ich keinen Online Speicher habe. Ich hoffe Ihr könnt euch vorstellen wie das aussieht.

Habt ihr eine Idee wie ich das Bild/Laben/Panel fixieren kann, dass es sich beim Lasen des Bildes nicht vergrößert?


Danke im Voraus,

dond0me


----------



## L-ectron-X (16. Nov 2011)

Doch, du kannst hier Bilder hochladen. Das würde sogar richtig helfen, dein Problem zu erfassen und anzugehen.
Wenn du in deinem nächsten Beitrag mal unter den Editor scrollst, findest du unter _Zusätzliche Einstellungen_ einen Bereich _Dateien anhängen_. Damit kannst du Dateien direkt in deinen Beitrag hochladen.


----------



## Michael... (16. Nov 2011)

dond0me hat gesagt.:


> Habe sowohl im Label, als auch im Panel die maximumSize (+ prefferedSize) angegeben. Es ändert aber nicht an meinem Problem.


In wie dies berücksichtigt wird und ob sich eine Komponente grundsätzlich ausdehnen kann, hängt vom LayoutManager ab und wie/wo die Komponente im Layout platziert ist.
Vermutlich wird nach dem Hinzufügen des Images die PreferredSize des Labels neu berechnet.


----------



## dond0me (17. Nov 2011)

Anbei ein paar screenshots.

Wenn die größe nochmals neu berechnet wird müsste ich das mit 


```
//Vorrangehender Code siehe oben 1. Post

jLabelPicLabel.setText("");
        jLabelPicLabel.setSize(287, 283);
        jPanelAvatarBild.setSize(287, 283);
        jPanelAvatarBild.setVisible(true);
```

ja auch beeinflussen können. Funktioniert aber leider nicht wirklich.


Viele Grüße


----------



## L-ectron-X (17. Nov 2011)

Kontrolliere mal, mit welchem LayoutManager du eigentlich arbeitest. Das sieht mir nach GroupLayout (Freedesign) aus.
Willst du wirklich mit GroupLayout arbeiten?

Probiere mal Folgendes:

```
//Bild ins Label einsetzen, danach mit

jLabelPicLabel.setPreferredSize(new Dimension(width, height)); //die bevorzugte Größe des Label festlegen
validate(); //Neuberechnung auslösen
// repaint(); //falls validate() alleine nichts bewirkt, zusätzlich auch mal mit repaint() versuchen
```

Damit sollte die bevorzugte Größe, mit der ein LayoutManager arbeitet, für dein Label eingestellt und eine Neuberechnung des Layouts ausgelöst werden können.


----------



## bERt0r (17. Nov 2011)

Beim group layout zählt da immer die Preferred Size, wenn du keine Speziellen angaben bei der Erstellung der Groups machst.

In der VerticalGroup könnte das aber auch beispielsweise so aussehen:

```
hgroup=gLayout.createHorizontalGroup().addComponent(label,20,100,Short.max);
```
In dem obigen Fall wäre es völlig egal welche PreferredSize im Component selber gesetzt wird, das Layout arbeitet immer mit 20 als minimale, 100 als präferierte und (fast) unendlich als maximale Höhe.

Da du anscheinend mit einem GUI Designer arbeitest, solltest du mal überprüfen/hier posten wie du dein Layout erstellst (Code der horizontal und vertical group).


----------



## dond0me (18. Nov 2011)

L-ectron-X hat gesagt.:


> Kontrolliere mal, mit welchem LayoutManager du eigentlich arbeitest. Das sieht mir nach GroupLayout (Freedesign) aus.
> Willst du wirklich mit GroupLayout arbeiten?
> 
> Probiere mal Folgendes:
> ...





Danke, jetzt wird das Fenster nicht mehr verschoben!

Leider passt sich das geladene Bild nicht an das Panel an sondern wird abgeschnitten (siehe Upload). 


Gruß,

Dominik


----------



## L-ectron-X (18. Nov 2011)

Die Maße des Bildes kannst du beim Zeichnen aus den Maßen des Labels/Panels entnehmen und damit auf die richtige Größe skalieren.


----------



## dond0me (18. Nov 2011)

> Kontrolliere mal, mit welchem LayoutManager du eigentlich arbeitest. Das sieht mir nach GroupLayout (Freedesign) aus.
> Willst du wirklich mit GroupLayout arbeiten?





> Beim group layout zählt da immer die Preferred Size, wenn du keine Speziellen angaben bei der Erstellung der Groups machst.
> 
> In der VerticalGroup könnte das aber auch beispielsweise so aussehen:
> Java Code: Quelltext in neuem Fenster öffnen
> ...





Sorry ich habe schon ewig nicht mehr mit Java gearbeitet und muss sagen, dass ich die GUI gar nciht erstellt habe. War ein Teamprojekt. Wo finde ich denn nochmal heraus mit welchem LayoutManager gearbeitet wurde?


Sorry für die blöden Fragen... ^^



Anbei noch das Bild das ich vergessen habe an obigen Post anzuhängen.
Gruß


----------



## bERt0r (18. Nov 2011)

Zeig uns doch deinen Layout Code.


----------

