Swing JLabel verschwindet hinter Image

BreakdownBob

Neues Mitglied
Moinsen,
habe folgendes Problem:
Ich hab ne Klasse StyledPanel geschrieben die vom JPanel erbt, in der ein BufferedImage über die paintComponent-Methode in den Hintergrund gezeichnet wird. Das StyledPanel besitzt ein contentPanel, in dem sich ein Label befindet. Das contentPanel ist durchsichtig (setOpaque(true)) damit man den Hintergrund im StyledPanel sehen kann. Jedoch verschwindet dadurch auch das Label und zwar nur dieses.
Alle anderen Component, die im contentPanel enthalten sind werden normal angezeigt.
Das Label kommt erst wieder zum Vorschein, wenn man setOpaque(true) vom Label aufruft, was natürlich auch deren Hintergrund zum Vorschein bringt.
Gewünscht ist aber, dass nur der Text des Labels dargestellt wird und nicht zusammen mit dem Hintergrund des Labels.

Alle Panels besitzen ein BoxLayout.

So sieht der Kopf der paintComponent-Methode des StyledPanels aus:
Code:
@Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if(background != null) {
            g.drawImage(background, background_left.getWidth()-3, this.BACKGROUND_TOP_Y+background_top.getHeight()-9, this.getSize().width-background_right.getWidth()-16, this.getSize().height-background_bottom.getHeight()-43, this);
        }
super.paintComponent(g) nach dem Zeichnen von background (BufferedImage) aufzurufen führt nur dazu dass background nicht mehr angezeigt wird (jedoch das Label).

Ich hab mich schon durch mehrer Foren durchgeklickt und zahlreiche Artikel zu den Swing Komponent und co. gelesen, aber noch keine passende Lösung gefunden.

Der Lösung, das StyledPanel vom JLabel erben zu lassen und diesem dann das Bild als ImageIcon zuübergeben, bin ich bisher ausgewichen, da ich sonst große Änderungen an meiner Klasse vornehmen müsste.

Ich würde mich freuen, wenn mir jemand eine schnellere Lösung für mein Problem zeigen könnte.

Gruß BreakdownBob

Hier nochmal der gesamte Code der Klasse StyledPanel:
Code:
package game.gui;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;

import javax.imageio.ImageIO;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.EmptyBorder;

import game.content.inventory.Inventory;
import game.content.item.Item;
import game.gui.ItemPanel;
import game.main.Game;
import game.safeload.SaveLoad;

public class StyledPanel extends JPanel{
   
    public static final Dimension DEFAULT_DIMENSION = new Dimension(300,300);
    public static final String RES_PATH = "styledpanel/";
    public static final String BACKGROUND = "background.png";
    public static final String BACKGROUND_TOP_SOURCE = "background_top.png";
    public static final String BACKGROUND_TOP_LEFT_SOURCE = "background_top_left.png";
    public static final String BACKGROUND_TOP_RIGHT_SOURCE = "background_top_right.png";
    public static final String BACKGROUND_TOP_SYMBOL_SOURCE = "background_top_symbol.png";
    public static final String BACKGROUND_LEFT_SOURCE = "background_left.png";
    public static final String BACKGROUND_RIGHT_SOURCE = "background_right.png";
    public static final String BACKGROUND_BOTTOM_SOURCE = "background_bottom.png";
    public static final String BACKGROUND_BOTTOM_LEFT_SOURCE = "background_bottom_left.png";
    public static final String BACKGROUND_BOTTOM_RIGHT_SOURCE = "background_bottom_right.png";
   
    public static final int BACKGROUND_TOP_Y = 40;
   
    public static final int BORDER_TOP_DEFAULT = 91;
    public static final int BORDER_RIGHT_DEFAULT = 51;
    public static final int BORDER_LEFT_DEFAULT = 51;
    public static final int BORDER_BOTTOM_DEFAULT = 50;
   
    protected int borderTop;
    protected int borderRight;
    protected int borderLeft;
    protected int borderBottom;
    private BufferedImage background;
    private BufferedImage background_top;
    private BufferedImage background_top_left;
    private BufferedImage background_top_right;
    private BufferedImage background_top_symbol;
    private BufferedImage background_left;
    private BufferedImage background_right;
    private BufferedImage background_bottom;
    private BufferedImage background_bottom_left;
    private BufferedImage background_bottom_right;
   
    private JLabel backgroundLbl;
    private JPanel contentPane;
   
    public StyledPanel() {
        this(DEFAULT_DIMENSION);
    }
   
    public StyledPanel(Dimension d) {
        setMaximumSize(d);
        setPreferredSize(d);
        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
       
        borderTop = BORDER_TOP_DEFAULT;
        borderRight = BORDER_RIGHT_DEFAULT;
        borderLeft = BORDER_LEFT_DEFAULT;
        borderBottom = BORDER_BOTTOM_DEFAULT;
        updateBorder();
        loadBackground();
       
        contentPane = new JPanel();
        Dimension contentD = new Dimension(this.getPreferredSize().width-borderLeft-borderRight,this.getPreferredSize().height-borderTop-borderBottom);
        contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.PAGE_AXIS));
        contentPane.setPreferredSize(contentD);
        contentPane.setMaximumSize(contentD);
        contentPane.setOpaque(false);
        add(contentPane);
       
    }
   
    public void updateBorder() {
        setBorder(new EmptyBorder(borderTop, borderLeft, borderBottom, borderRight));
    }
   
    public int getBorderTop() {
        return borderTop;
    }

    public void setBorderTop(int borderTop) {
        this.borderTop = borderTop;
        updateBorder();
    }

    public int getBorderRight() {
        return borderRight;
    }

    public void setBorderRight(int borderRight) {
        this.borderRight = borderRight;
        updateBorder();
    }

    public int getBorderLeft() {
        return borderLeft;
    }

    public void setBorderLeft(int borderLeft) {
        this.borderLeft = borderLeft;
        updateBorder();
    }

    public int getBorderBottom() {
        return borderBottom;
    }

    public void setBorderBottom(int borderBottom) {
        this.borderBottom = borderBottom;
        updateBorder();
    }
   
    public JPanel getContentPane() {
        return contentPane;
    }

    private void loadBackground() {
        try {
           
            background = ImageIO.read(new File(Game.RESOURCE_FOLDER + this.RES_PATH + BACKGROUND));
            background_top = ImageIO.read(new File(Game.RESOURCE_FOLDER + this.RES_PATH + BACKGROUND_TOP_SOURCE));
            background_top_left = ImageIO.read(new File(Game.RESOURCE_FOLDER + this.RES_PATH + BACKGROUND_TOP_LEFT_SOURCE));
            background_top_right = ImageIO.read(new File(Game.RESOURCE_FOLDER + this.RES_PATH + BACKGROUND_TOP_RIGHT_SOURCE));
            background_top_symbol = ImageIO.read(new File(Game.RESOURCE_FOLDER + this.RES_PATH + BACKGROUND_TOP_SYMBOL_SOURCE));
           
            background_bottom = ImageIO.read(new File(Game.RESOURCE_FOLDER + this.RES_PATH + BACKGROUND_BOTTOM_SOURCE));
            background_bottom_left = ImageIO.read(new File(Game.RESOURCE_FOLDER + this.RES_PATH + BACKGROUND_BOTTOM_LEFT_SOURCE));
            background_bottom_right = ImageIO.read(new File(Game.RESOURCE_FOLDER + this.RES_PATH + BACKGROUND_BOTTOM_RIGHT_SOURCE));
           
            background_left = ImageIO.read(new File(Game.RESOURCE_FOLDER + this.RES_PATH + BACKGROUND_LEFT_SOURCE));
           
            background_right = ImageIO.read(new File(Game.RESOURCE_FOLDER + this.RES_PATH + BACKGROUND_RIGHT_SOURCE));
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
   
   
   
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if(background != null) {
            g.drawImage(background, background_left.getWidth()-3, this.BACKGROUND_TOP_Y+background_top.getHeight()-9, this.getSize().width-background_right.getWidth()-16, this.getSize().height-background_bottom.getHeight()-43, this);
        }
       
        if(background_top != null) {
            g.drawImage(background_top, 0, this.BACKGROUND_TOP_Y, this.getSize().width, background_top.getHeight(), this);
        }
       
        if(background_bottom != null) {
            g.drawImage(background_bottom, 0, this.getSize().height-background_bottom.getHeight(), this.getSize().width, background_bottom.getHeight(), this);
        }
       
        if(background_left != null) {
            g.drawImage(background_left, 0, BACKGROUND_TOP_Y, background_left.getWidth(), (int)this.getSize().getHeight(), this);
        }
       
        if(background_right != null) {
            g.drawImage(background_right, this.getSize().width-background_right.getWidth(), BACKGROUND_TOP_Y, background_right.getWidth(), (int)this.getSize().getHeight(), this);
        }
       
        if(background_top_left != null) {
            g.drawImage(background_top_left, 0, BACKGROUND_TOP_Y-1, background_top_left.getWidth(), background_top_left.getHeight(), this);
        }
       
        if(background_top_right != null) {
            g.drawImage(background_top_right, this.getSize().width-background_top_right.getWidth(), BACKGROUND_TOP_Y-1, background_top_right.getWidth(), background_top_right.getHeight(), this);
        }
       
        if(background_bottom_left != null) {
            g.drawImage(background_bottom_left, 0, this.getSize().height-background_bottom_left.getHeight(), background_bottom_left.getWidth(), background_bottom_left.getHeight(), this);
        }
       
        if(background_bottom_right != null) {
            g.drawImage(background_bottom_right, this.getSize().width-background_bottom_right.getWidth(), this.getSize().height-background_bottom_left.getHeight(), background_bottom_left.getWidth(), background_bottom_left.getHeight(), this);
        }
       
        if(background_top_symbol != null) {
            g.drawImage(background_top_symbol, this.getSize().width/2-background_top_symbol.getWidth()/2, 0, background_top_symbol.getWidth(), background_top_symbol.getHeight(), this);
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(500, 700);
        frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));
       
        StyledPanel sp = new StyledPanel();
        try {
            sp = new StyledPanel(new Dimension(300,500));
            JLabel label = new JLabel("asdasd");
            JButton button = new JButton("asdasd");
            sp.getContentPane().add(button);
            sp.getContentPane().add(label);
        } catch (Exception e) {
            e.printStackTrace();
        }
        frame.getContentPane().add(sp);
        frame.setVisible(true);
    }

}
 

Robat

Top Contributor
Warum fügst du die Komponenten nicht gleich dem StyledPanel hinzu sondern schiebst noch mal ein Jpanel dazwischen?
 

BreakdownBob

Neues Mitglied
Styled Panel hat n paar Subklassen, die ihre eigenen Komponenten zum contentPanel hinzufügen. Durch das contentPanel kann man die Skalierung der Komponenten der Subklassen einfach an das contentPanel anpassen, da ich n paar Komponenten hatte die speziell skaliert werden sollen. Sonst müsste ich die verschiedenen border immer extra von der Größe des Stylepanels abziehen und dann den Komponenten zuweisen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
D JLabel übereinanderlegen AWT, Swing, JavaFX & SWT 5
E JLabel kopieren AWT, Swing, JavaFX & SWT 31
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
E JLabel AWT, Swing, JavaFX & SWT 1
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
I JLabel neue Zeile AWT, Swing, JavaFX & SWT 4
L JLabel ist verzerrt/größer als eingestellt AWT, Swing, JavaFX & SWT 15
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
E Wie kann ich ein JLabel auf größe der schriftlänge setzten? AWT, Swing, JavaFX & SWT 2
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
L Kalendar als JLabel einfügen AWT, Swing, JavaFX & SWT 3
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
it_is_all jLabel.setText -> Char in Str: NullpointerException AWT, Swing, JavaFX & SWT 1
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
it_is_all JLabel.setIcon - funktioniert nicht mehr AWT, Swing, JavaFX & SWT 2
P Aktualisierung von jLabel in jFrames AWT, Swing, JavaFX & SWT 8
DaCrazyJavaExpert Swing JLabel Klickanimation AWT, Swing, JavaFX & SWT 4
A Swing JLabel als Parameter übergeben AWT, Swing, JavaFX & SWT 9
M JLabel ausrichten AWT, Swing, JavaFX & SWT 2
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
T JLabel Textinhalt von Oben anzeigen AWT, Swing, JavaFX & SWT 1
N JLabel in JTabbedPane verschieben AWT, Swing, JavaFX & SWT 2
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
OlafHD JLabel im JFrame Zentrieren AWT, Swing, JavaFX & SWT 2
T Event Handling JLabel als eigener Button AWT, Swing, JavaFX & SWT 7
T JLabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
F Abgeleitetes JLabel AWT, Swing, JavaFX & SWT 16
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
S jLabel HTML Formatierung AWT, Swing, JavaFX & SWT 2
J Statisches JLabel adden AWT, Swing, JavaFX & SWT 4
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
T JLabel in die Mitte(JLabel.CENTER geht nicht) AWT, Swing, JavaFX & SWT 12
2 JLabel - setText ändert den Text nicht AWT, Swing, JavaFX & SWT 4
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta JLabel anzuzeigenden Text zentrieren AWT, Swing, JavaFX & SWT 9
K Swing unterschied JTextField und JLabel AWT, Swing, JavaFX & SWT 7
F Swing JLabel in JFrame anpassen AWT, Swing, JavaFX & SWT 20
E JLabel aus Runnable ändern AWT, Swing, JavaFX & SWT 2
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
D JLabel bei Aufruf neue Zeile AWT, Swing, JavaFX & SWT 5
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
F ListCellRenderer mit JLabel und MouseListener AWT, Swing, JavaFX & SWT 4
F Swing JLabel wird nicht sofort Angezeigt AWT, Swing, JavaFX & SWT 3
D Timer für Bildfolge in einem jLabel AWT, Swing, JavaFX & SWT 5
S JLabel-Text in Methode setzen? AWT, Swing, JavaFX & SWT 2
GreyFox JLabel in laufender Anwendung erzeugen AWT, Swing, JavaFX & SWT 6
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
Z Auf ein JLabel drauf malen? AWT, Swing, JavaFX & SWT 1
S JLabel in den Vordergrund rücken AWT, Swing, JavaFX & SWT 1
A JLabel hochzählen lassen. AWT, Swing, JavaFX & SWT 6
S JLabel mit ImageIcon, komischer Rahmen? AWT, Swing, JavaFX & SWT 2
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
S JLabel anordnen AWT, Swing, JavaFX & SWT 2
J ungewollt-automatische Größenänderung von JLabel AWT, Swing, JavaFX & SWT 5
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
L 2D-Grafik PNG Datei in JLabel Array Problem AWT, Swing, JavaFX & SWT 4
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
B Swing JLabel und LayoutManager AWT, Swing, JavaFX & SWT 20
M Bild aus JLabel resizen und speichern AWT, Swing, JavaFX & SWT 0
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
O Statusleiste mit JLabel aktualisieren AWT, Swing, JavaFX & SWT 5
G jLabel aus anderem Fenster ändern AWT, Swing, JavaFX & SWT 7
T JLabel Nullpunkt verschieben AWT, Swing, JavaFX & SWT 6
F Swing JPanel mit JLabel spinnt? AWT, Swing, JavaFX & SWT 2
M Massenweise JLabel ? oder ? AWT, Swing, JavaFX & SWT 3
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
N JLabel HTML mit custom Font AWT, Swing, JavaFX & SWT 0
V JLabel bzw. GUI aus externen Thread ansteuern AWT, Swing, JavaFX & SWT 3
G JLabel verdeckt AWT, Swing, JavaFX & SWT 12
A JLabel zeichendicke einstellen AWT, Swing, JavaFX & SWT 3
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
S JLabel zeigt ImageIcon nicht AWT, Swing, JavaFX & SWT 13
S jLabel / jText beim starten ausblenden AWT, Swing, JavaFX & SWT 2
A Array von JLabel mit Grafiken anzeigen AWT, Swing, JavaFX & SWT 3
T Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen AWT, Swing, JavaFX & SWT 5
A JLabel im Listener färben AWT, Swing, JavaFX & SWT 11
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
T Kreis in Jlabel darstellen. AWT, Swing, JavaFX & SWT 13
SexyPenny90 JLabel liegt unter meiner Turtle AWT, Swing, JavaFX & SWT 5
V JLabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
B Buttons auf JLabel? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben