ImageIcon auf JPanel austauschen

BenBu

Mitglied
Hallo Leute,
Ich bin ein Neuling im auf der Insel und habe mir jetzt in den letzten 3 Wochen mithilfe von Foren eine Nutzeroberfläche aufgebaut und stecke jetzt doch fest.

Der Plan ist die Oberfläche mit "Kacheln" aufzubauen, die ich austauschen kann.
dazu habe ich:
Java:
import java.awt.Color;

import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;

import javax.swing.*;


public class GuiGame extends JFrame implements MouseListener{
    Container cFeld;
    
    JPanel jpKachel1;
    JPanel jpKachel2;
    JPanel jpKachel3;
    JPanel jpKachel4;

angelegt. (es gibt weitere Kacheln)

Anschließend habe ich
Code:
    public GuiGame() {
        cFeld = getContentPane();
        cFeld.setLayout(null);                        
    
        //Kacheln erzeugen
        jpKachel1= new JPanel();
        jpKachel2= new JPanel();
        jpKachel3= new JPanel();


und dann habe ich die Kacheln so mit Icons gefüllt:
Code:
        jpKachel1.setBounds(0, -5, 89, 100 );
        ImageIcon Kachel1 = new ImageIcon("C:/Users/.../Leer_01.jpg");
        jpKachel1.add(new JLabel(Kachel1));
    
        jpKachel2.setBounds(89, -5, 89, 100 );
        ImageIcon Kachel2 = new ImageIcon("C:/Users/.../Leer_02.jpg");
        jpKachel2.add(new JLabel(Kachel2));
        jpKachel2.addMouseListener(this);
        
        jpKachel3.setBounds(178, -5, 89, 100 );
        ImageIcon Kachel3 = new ImageIcon("C:/Users/.../Leer_03.jpg");
        jpKachel3.add(new JLabel(Kachel3));
        jpKachel3.addMouseListener(this);

Zuletzt noch hinzufügen:
Code:
        cFeld.add(jpKachel1);
        cFeld.add(jpKachel2);
        cFeld.add(jpKachel3);
        cFeld.add(jpKachel4);
        cFeld.add(jpKachel5);

Wenn ich jetzt mit dem MouseListener auf meine Kachel 2 schaue, erkennt er einen Klick aber ich möchte dann ein anderes Icon auf einem Panel tauschen. Ich habe es schon mit .remove versucht aber das Bild bleibt auf dem Panel.
Ich habe inzwischen das Gefühl, dass ich grundsätzlich etwas flasch gemacht habe und es deswegen nicht funktioniert. Vielleicht kann mir jemand meinen Fehler erklären.
 

KonradN

Super-Moderator
Mitarbeiter
Ich habe jetzt die Fehlebeschreibung nicht so ganz verstanden. Du änderst ein Panel (also z.B. das Bild auf dem Panel) aber die Anzeige ändert sich nicht?

Immer wenn Du etwas änderst musst Du auch dafür sorgen, dass es neu gemalt wird. Das haben viele Controls bereits drin, aber wenn Du sowas selbst machst, dann musst Du einmal repaint() auf der Komponente (oder dem ganzen Fenster) aufrufen.

Wenn Elemente hinzufügst oder entfernst, dann sind ggf. auch revalidate und pack vorher notwendig (Dies kann wichtig sein, wenn Größen auch durch das Layout dynamisch verändert oder berechnet werden).
 

BenBu

Mitglied
Ich habe jetzt die Fehlebeschreibung nicht so ganz verstanden. Du änderst ein Panel (also z.B. das Bild auf dem Panel) aber die Anzeige ändert sich nicht?

Immer wenn Du etwas änderst musst Du auch dafür sorgen, dass es neu gemalt wird. Das haben viele Controls bereits drin, aber wenn Du sowas selbst machst, dann musst Du einmal repaint() auf der Komponente (oder dem ganzen Fenster) aufrufen.

Wenn Elemente hinzufügst oder entfernst, dann sind ggf. auch revalidate und pack vorher notwendig (Dies kann wichtig sein, wenn Größen auch durch das Layout dynamisch verändert oder berechnet werden).
Super danke . mit dem repaint kann ich jetzt das Bild weg nehmen. das hat mich schon einmal einne Schritt weiter gebracht.
Jetzt muss ich nur noch ein neues Bild reinladen. Dabei ist mir aufegfallen, dass meine Icons garnicht in der Mitte meines Panels liegen. und wenn ich das Panel auf die Icongröße reduziere schneidet er mir oben was weg obwohl unten noch leerer Raum ist. Das ist komisch. kann man Panel genau so groß machen wie das Icon. Ich habe das Gefühl ich bekomme den Rand nicht weg. Auch mit Center Befehelen scheine ich immer einen Rand zu behalten.
 

Neumi5694

Top Contributor
Super danke . mit dem repaint kann ich jetzt das Bild weg nehmen. das hat mich schon einmal einne Schritt weiter gebracht.
Jetzt muss ich nur noch ein neues Bild reinladen. Dabei ist mir aufegfallen, dass meine Icons garnicht in der Mitte meines Panels liegen. und wenn ich das Panel auf die Icongröße reduziere schneidet er mir oben was weg obwohl unten noch leerer Raum ist. Das ist komisch. kann man Panel genau so groß machen wie das Icon. Ich habe das Gefühl ich bekomme den Rand nicht weg. Auch mit Center Befehelen scheine ich immer einen Rand zu behalten.
Hier fehlt der Code, wo du die Bilder zeichnen lässt, also kann man wenig dazu sagen.

Natürlich kann man Panels so groß machen wie das Icon, dafür ist setSize da. Aber du machst das Ganze zu kompliziert und ineffizient.
Panels sind nicht dafür gedacht, Icons anzuzeigen. Man kann während der paint-Methode natürlich ein Image zeichnen lassen, aber für Icons in einer UI werden im Normalfall Labels verwendet. Wenn man bei denen die Margins auf 0 setzt, haben sie die korrekte Größe.

Aber du scheinst hier Tiles wie in einem Spiel zu verwenden. So lange du nicht den Swing-Rand der Panels brauchst (und auch dann gibt's bessere Möglichkeiten), solltest du auf die einzelnen Panels und Labels komplett verzichten, sondern nur ein einzelnes Panel verwenden, alles Icons oder Tiles dann mit entsprechendem Offset während der PaintComponent Methode zeichnen. Auch brauchst du dann nur einen Mouse-Listener. Anhand der Koordinaten findest du dann raus, über welchem Tile du duch befindest.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
L ImageIcon auf JPanel wird nicht angezeigt(keiner Fehlermeldung) AWT, Swing, JavaFX & SWT 11
C Swing ImageIcon erstellen, skalieren und verwenden AWT, Swing, JavaFX & SWT 3
N imageIcon zeigt kein Bild an AWT, Swing, JavaFX & SWT 5
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
CptK Swing Button: ImageIcon unter den Text AWT, Swing, JavaFX & SWT 4
cool_brivk24 Swing ImageIcon lädt kein Bild AWT, Swing, JavaFX & SWT 12
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
S Bild mit ImageIcon auf GUI verkleinern AWT, Swing, JavaFX & SWT 3
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
Tausendsassa ImageIcon?! Hilfe! AWT, Swing, JavaFX & SWT 10
S JLabel mit ImageIcon, komischer Rahmen? AWT, Swing, JavaFX & SWT 2
O ImageIcon lädt nicht AWT, Swing, JavaFX & SWT 2
kaoZ Swing JToolBar, ImageIcon werden teilweise verdeckt AWT, Swing, JavaFX & SWT 0
R ImageIcon - Über Socket AWT, Swing, JavaFX & SWT 1
P ImageIcon lade schlägt fehl AWT, Swing, JavaFX & SWT 5
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
S JLabel zeigt ImageIcon nicht AWT, Swing, JavaFX & SWT 13
B ImageIcon - Probleme mit dem Dateipfad AWT, Swing, JavaFX & SWT 5
C Swing ImageIcon mit Bild aus Temp-Verzeichniss füllen AWT, Swing, JavaFX & SWT 15
P ImageIcon auf Rectangle AWT, Swing, JavaFX & SWT 3
C ImageIcon eines Labels auf einem Panel in neuem Fenster anzeigen AWT, Swing, JavaFX & SWT 2
A Swing ImageIcon hover AWT, Swing, JavaFX & SWT 9
M ImageIcon Bild wird beim verkleinern des Fensters nicht verkleinert AWT, Swing, JavaFX & SWT 3
B Swing ImageIcon Resizing AWT, Swing, JavaFX & SWT 15
S ImageIcon von Label entfernen AWT, Swing, JavaFX & SWT 9
B Warten bis neues ImageIcon zugewiesen ist AWT, Swing, JavaFX & SWT 3
Zettelkasten imageIcon-Rand wegmachen AWT, Swing, JavaFX & SWT 5
S Abspeichern aus einem ImageIcon ins korrekte Format AWT, Swing, JavaFX & SWT 2
J ImageIcon: ZipException bei ungültiger PNG-Datei AWT, Swing, JavaFX & SWT 2
S ImageIcon Grösse anpassen AWT, Swing, JavaFX & SWT 2
J Geladene Grafik in ImageIcon auf Panel fest positionern. AWT, Swing, JavaFX & SWT 8
badfish Swing ImageIcon auf JLabel, Fenster Maximieren verbieten und Icon oben links austauschen? AWT, Swing, JavaFX & SWT 5
B Problem mit imageIO und ImageIcon AWT, Swing, JavaFX & SWT 5
M Swing ImageIcon über JFileChooser einbinden AWT, Swing, JavaFX & SWT 4
C Swing JComboBox - Problem bei Darstellen von ImageIcon AWT, Swing, JavaFX & SWT 4
G ImageIcon viel zu groß AWT, Swing, JavaFX & SWT 2
G IMageIcon Bildgröße ändern AWT, Swing, JavaFX & SWT 7
isowiz Leeres ImageIcon einer bes timmten Größe erzeugen AWT, Swing, JavaFX & SWT 2
W ImageIcon im JLabel mit autosize? AWT, Swing, JavaFX & SWT 3
B ImageIcon JFrame AWT, Swing, JavaFX & SWT 3
M ImageIcon auf AbstractButton links-/rechtbündig AWT, Swing, JavaFX & SWT 2
D jButton mit ImageIcon & MouseListener AWT, Swing, JavaFX & SWT 5
M ImageIcon in JLabel verkleinern AWT, Swing, JavaFX & SWT 8
S n-e-w JLabel(n-e-w ImageIcon(i)) funkt. nicht im JScrollPane AWT, Swing, JavaFX & SWT 2
M Problem, an ImageIcon in JPanels zu kommen. AWT, Swing, JavaFX & SWT 2
J Bildfilterung und Ausgabe in ein ImageIcon AWT, Swing, JavaFX & SWT 2
X ImageIcon für JButton AWT, Swing, JavaFX & SWT 4
X JButton "effect" für ImageIcon AWT, Swing, JavaFX & SWT 6
F ImageIcon -> BufferedImage AWT, Swing, JavaFX & SWT 2
T ImageIcon als Seperator im Jmenu AWT, Swing, JavaFX & SWT 8
G JLabel und ImageIcon AWT, Swing, JavaFX & SWT 16
padde479 ImageIcon laden AWT, Swing, JavaFX & SWT 6
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5
J ImageIcon, Image - 100% CPU Auslastung . AWT, Swing, JavaFX & SWT 3
B imageicon relativer Pfad AWT, Swing, JavaFX & SWT 5
F ImageIcon Größe ändern AWT, Swing, JavaFX & SWT 29
M ImageIcon / .paintIcon() AWT, Swing, JavaFX & SWT 2
M Problem mit ImageIcon in einer JTable AWT, Swing, JavaFX & SWT 2
D JButton einen neuen ImageIcon setzen? AWT, Swing, JavaFX & SWT 2
R resize ImageIcon AWT, Swing, JavaFX & SWT 7
B Problem mit ImageIcon/Swing in Linux AWT, Swing, JavaFX & SWT 6
K ImageIcon fehler ? AWT, Swing, JavaFX & SWT 4
M ImageIcon laden? AWT, Swing, JavaFX & SWT 2
P Zwei JPanel übereianderlegen AWT, Swing, JavaFX & SWT 14
XWing Basic JPanel mit 2 Buttons beutzen. AWT, Swing, JavaFX & SWT 10
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
M clear JPanel before repainting AWT, Swing, JavaFX & SWT 1
T Swing Reload JPanel + darin liegende ProgressBar AWT, Swing, JavaFX & SWT 9
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
F JPanel Celleditor AWT, Swing, JavaFX & SWT 8
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
Ich lerne Java. Swing Von JPanel A auf JPanel B zugreifen. AWT, Swing, JavaFX & SWT 4
A JPanel austauschen und Focus geben AWT, Swing, JavaFX & SWT 3
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
L JComponent aus JPanel anhand Mausposition ermitteln AWT, Swing, JavaFX & SWT 10
J JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
B Verschiebbares JPanel "ruckelt" im Randbereich AWT, Swing, JavaFX & SWT 2
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
L JPanel zeigt keinen Inhalt AWT, Swing, JavaFX & SWT 1
dereki2000 JPanel mit Rückgbe wie bei JOptionPane AWT, Swing, JavaFX & SWT 3
E Hintergrundfarbe setzen in JPanel funktioneirt nicht AWT, Swing, JavaFX & SWT 4
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
L Swing JPanel Größe anpassen AWT, Swing, JavaFX & SWT 6
D Platzierung von JTextfield in JPanel AWT, Swing, JavaFX & SWT 3
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Zwei JPanel übereinander nur vorderes "repainten" AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben