Bild in JPanel verschiebt Layout. Wie fixieren?

dond0me

Mitglied
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:


Java:
    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
 
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.
 
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.
 
Anbei ein paar screenshots.

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

Java:
//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
 
Kontrolliere mal, mit welchem LayoutManager du eigentlich arbeitest. Das sieht mir nach GroupLayout (Freedesign) aus.
Willst du wirklich mit GroupLayout arbeiten?

Probiere mal Folgendes:
Java:
//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.
 
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:
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).
 
Zuletzt bearbeitet:
Kontrolliere mal, mit welchem LayoutManager du eigentlich arbeitest. Das sieht mir nach GroupLayout (Freedesign) aus.
Willst du wirklich mit GroupLayout arbeiten?

Probiere mal Folgendes:
Java:
//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.



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
 
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.
 
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

1



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).



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ß
 

Neue Themen


Zurück
Oben