paintComponent, neue Instanz überschreibt wohl alte Instanz

Status
Nicht offen für weitere Antworten.

spidermobile

Bekanntes Mitglied
Hallo zusammen,

leider ist mir kein besserer Titel eingefallen. Ich übe im Moment wieder ein wenig. Hab mir hierzu ein Beispiel von hier genommen und umgebaut. Mein Ziel ist, mehrere Karten zu bewegen. Die erste Karte funktioniert auch.

Code:
		imageLabel = new ImageLabel();
		cardDefault = new ImageIcon("cardDefault.png");
		imageLabel.setIcon(cardDefault, 10, 6, 60);

Nun bilde ich mir ein, eine neue Instanz zu bilden, um die 2. Karte zu bewegen.

Code:
		imageLabel2 = new ImageLabel();
		cardDefault = new ImageIcon("cardDefault.png");
		imageLabel2.setIcon(cardDefault, 9, 6, 80);

Aber nun bewegt sich nur noch die 2. Karte. Ich komme nicht drauf, was mein Denkfehler ist.

Code:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class MoveImageIcon extends JFrame implements ActionListener {

	private ImageLabel imageLabel, imageLabel2;
	private ImageIcon cardDefault;
	private JButton nextButton;
	private JPanel mainPanel;
	
	
	public MoveImageIcon() {
		super();
		setSize(1000,800);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
		Container contentPane = getContentPane();
		
		mainPanel = new JPanel();
		mainPanel.setLayout(new BorderLayout());
//		nextButton = new JButton("Karte");
//		nextButton.addActionListener(this);
//		getContentPane().add(nextButton, BorderLayout.NORTH);
		
		imageLabel = new ImageLabel();
		cardDefault = new ImageIcon("cardDefault.png");
		imageLabel.setIcon(cardDefault, 10, 6, 60);

		imageLabel2 = new ImageLabel();
		cardDefault = new ImageIcon("cardDefault.png");
		imageLabel2.setIcon(cardDefault, 9, 6, 80);
		
//		getContentPane().add(imageLabel, BorderLayout.CENTER);
		
		contentPane.add(mainPanel);
		mainPanel.add(imageLabel);
		mainPanel.add(imageLabel2);
		
	}
	
    public void actionPerformed(ActionEvent evt) {
		imageLabel.setIcon(cardDefault);
    }
	
	public static void main(String[] args) {

		MoveImageIcon moveImageIcon = new MoveImageIcon();
		moveImageIcon.setVisible(true);
	}

}


class ImageLabel extends JLabel implements Runnable {
	
    private ImageIcon icon;
//    private int x, y, w, h;
    private int xNew, yNew, wNew, hNew;
	private int xMove, yMove, xDest;
	
	public ImageLabel() {
		super();
		
		xNew = 473;
		yNew = 27;
		wNew = 71;
		hNew = 96;
		
		xMove = 0;
		yMove = 0;
		xDest = 0;
		
	}
	
    public void setIcon(ImageIcon icon, int xMove, int yMove, int xDest) {
		
		this.xMove = xMove;
		this.yMove = yMove;
		this.xDest = xDest;
		
//        x = xNew;
//        y = yNew;
//        w = wNew;
//        h = hNew;
        this.icon = icon;
        changeImage();
    }
	
	public void paintComponent(Graphics g) {
		super.paintComponents(g);
//		xNew = 200;
//		yNew = 200;
//		wNew = 71;
//		hNew = 96;
		
		
	      Image img = getToolkit().getImage("table.jpg");
	      MediaTracker mt = new MediaTracker(this);
	      mt.addImage(img, 0);
	        try {
	            mt.waitForAll();
	          } catch (InterruptedException e) {
	             //nothing
	           }   
			  g.drawImage(img,0,0,this); 

		
		g.drawImage(icon.getImage(),xNew, yNew, wNew, hNew, null);
	}
	
	
	private void changeImage() {
		Thread t = new Thread(this);
		t.start();
	}
	
	public void run() {
		do {
			xNew = xNew - xMove;
			yNew = yNew + yMove;
			repaint();
			try {
				Thread.sleep(10);
				} 
				catch (Exception ex) {
					
				}
		} while (xNew > xDest);
		repaint();
	}
	
}
 

André Uhres

Top Contributor
mainPanel hat BorderLayout.
Mit:
Code:
       mainPanel.add(imageLabel);
        mainPanel.add(imageLabel2);
wird imageLabel ins Zentrum gesetzt und dann
wird imageLabel2 ins Zentrum gesetzt.
imageLabel ist somit wieder weg.

Du siehst also nur das zweite Bild !
 

spidermobile

Bekanntes Mitglied
Hallo André,

erkennst bestimmt das Beispiel. Vielen Dank dafür!

Aha, da wäre ich nie drauf gekommen.

Code:
		mainPanel.setLayout(null);

Ohne Layoutmanager kommt leider gar nicht mehr (ich brauche ka auch eigentlich keins, da ich ja alles zeichne). Was sollte ich denn für ein Layout verwenden?

Vielen Dank!!!
 

André Uhres

Top Contributor
spidermobile hat gesagt.:
..Ohne Layoutmanager kommt leider gar nicht mehr ..
Du müsstest dann imageLabel2.setBounds(0,0,1000,800); setzten, mit demselben Resultat.
Das Problem ist, dass du nicht das Label bewegst sondern das Bild im Label.
So könntest du also die beiden Labels nur nebeneinander zeigen (und auf jedem bewegt sich was).
Etwa so:
Code:
       imageLabel = new ImageLabel();
        imageLabel.setBounds(0,0,500,800);
...
        imageLabel2 = new ImageLabel();
        imageLabel2.setBounds(500,0,500,800);
 

spidermobile

Bekanntes Mitglied
Sorry, aber verstanden hab ich das nicht.

Ich denke, dass es doch eine allgemeine Möglichkeit geben muss, auf einem Panel zu zeichnen. Das wird doch bei jedem Spiel benötigt.

Wie schon gesagt, bin eigentlich Anfänger. Hast Du vielleicht noch einen Tipp oder einen Link auf einen anderen Beitrag.

Danke!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Probleme mit paintComponent Java Basics - Anfänger-Themen 13
F Java GUI-PaintComponent funktioniert nicht Java Basics - Anfänger-Themen 1
H Programmaufbau in Ordnung? Problem mit paintComponent() Java Basics - Anfänger-Themen 10
I Methoden public void paintComponent (Graphics g) Java Basics - Anfänger-Themen 4
S Rectangles ausserhalb der paintComponent drawen! Java Basics - Anfänger-Themen 9
M Problem mit paintComponent Java Basics - Anfänger-Themen 6
M PaintComponent Java Basics - Anfänger-Themen 9
J Wer oder was ruft die "paintComponent()" Methode auf? Java Basics - Anfänger-Themen 19
K paintComponent Java Basics - Anfänger-Themen 23
K paintComponent Java Basics - Anfänger-Themen 9
G paintComponent wird nicht ausgeführt Java Basics - Anfänger-Themen 4
kulturfenster paintComponent wird nicht aufgerufen Java Basics - Anfänger-Themen 16
kulturfenster Frage bez paintComponent Java Basics - Anfänger-Themen 5
kulturfenster super.paintComponent(g); Java Basics - Anfänger-Themen 3
G fehler bei paintComponent Java Basics - Anfänger-Themen 6
kulturfenster paintComponent und Timer Java Basics - Anfänger-Themen 2
W Weitere Parameter in die paintComponent()-Methode übergeben? Java Basics - Anfänger-Themen 7
ElViZ paintComponent in den Vordergrund? Java Basics - Anfänger-Themen 2
F paintComponent mit repaint() aufrufen Java Basics - Anfänger-Themen 27
M paintComponent() in abstrakter und vererbender Klasse Java Basics - Anfänger-Themen 3
G paintComponent(Graphics g) Java Basics - Anfänger-Themen 2
V KSKB zum Verständnis von Graphics und paintComponent Java Basics - Anfänger-Themen 6
G paintComponent neu zeichnen Java Basics - Anfänger-Themen 5
G Exception in PaintComponent Java Basics - Anfänger-Themen 2
U BufferedImage anzeigen, imageIcon oder paintComponent(); Java Basics - Anfänger-Themen 6
G probleme mit paintComponent Java Basics - Anfänger-Themen 14
M Probleme mit JPanel und paintComponent Java Basics - Anfänger-Themen 3
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
F Erste Schritte Zahlenreihe von Arraylist in 3erBlöcke sortiert in neue Arraylist Java Basics - Anfänger-Themen 2
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
C Nachträglich neue grafische Objekte hinzufügen Java Basics - Anfänger-Themen 7
A eine neue normale String-Array von einer String-Array, die in for schleife ist, schaffen Java Basics - Anfänger-Themen 3
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
J Neue Werte in ein Array hinzugeben Java Basics - Anfänger-Themen 8
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
B Objekt an neue Stage übergeben? Java Basics - Anfänger-Themen 9
L Neue Klasse für TableView? Java Basics - Anfänger-Themen 17
tsom Erste Schritte itext Text als Block auf neue Seite Java Basics - Anfänger-Themen 0
T Zufällige Matrix in neue Matrix schreiben Java Basics - Anfänger-Themen 6
M BufferedReader neue Zeile nach Knopfdruck Java Basics - Anfänger-Themen 9
S drawString() neue Zeile Java Basics - Anfänger-Themen 4
H Aus wav-datei lesen und in neue wav-datei speichern Java Basics - Anfänger-Themen 10
E Wenn i (for-Loop) bestimmter Wert, dann neue Zeile eines Buttons Java Basics - Anfänger-Themen 7
Hijo2006 Neue externe Klasse einbinden Java Basics - Anfänger-Themen 13
W Neue Klassenmethode implementieren.. Java Basics - Anfänger-Themen 6
U neue Methoden in JSP??? Java Basics - Anfänger-Themen 1
L0MiN Erste Schritte Neue Punkte zu einer Map hinzufügen und dauerhaft speichern? Java Basics - Anfänger-Themen 4
N wie schreibt man die neue for schleife? Java Basics - Anfänger-Themen 3
D Wie erstelle ich eine neue Hauptklasse mit eclipse? Java Basics - Anfänger-Themen 3
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
B Neue Bibliothek hinzufügen Java Basics - Anfänger-Themen 2
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
M FileWriter Neue Datei wenn aktuelle "zu groß" Java Basics - Anfänger-Themen 3
C auslesen bestimmter werte einer textdatei und anschl. hineinschreiben in eine neue txt-datei. Java Basics - Anfänger-Themen 2
R csv-Datei auslesen und ausgelesene Daten in neue csv-Datei speichern Java Basics - Anfänger-Themen 2
D Neue Array übernimmt Werte des alten nicht Java Basics - Anfänger-Themen 5
J Neue Zeile an bestimmter Stelle in Textdatei einfügen Java Basics - Anfänger-Themen 2
M Neue Objekte mit Hilfe von String Variable erschaffen Java Basics - Anfänger-Themen 2
I Neue Klassenbibliothek erstellen Java Basics - Anfänger-Themen 8
K Iteration - Alte und neue For Schleife Java Basics - Anfänger-Themen 17
M Klassen Eine Klasse abrufen ohne eine neue Instanze auf zu rufen? Java Basics - Anfänger-Themen 8
C Vector erzeugt neue Indizes nach Input Java Basics - Anfänger-Themen 2
S neue Methode schreiben Java Basics - Anfänger-Themen 14
E Variable neue Random Zahl zuweisen, wenn Button geklickt Java Basics - Anfänger-Themen 5
J Werte ins neue Fenster übertragen Java Basics - Anfänger-Themen 6
G Ausgabe nach 5 Zeichen in neue Zeile schreiben??? Java Basics - Anfänger-Themen 12
A Werte per Zufall aus einer Datei ziehen und in eine neue Datei schreiben Java Basics - Anfänger-Themen 9
F Variablen Übergabe von eingelesenen Variablen in neue Klasse Java Basics - Anfänger-Themen 15
U neue Java-Datei öffnen Java Basics - Anfänger-Themen 10
S Itext und eine neue Zeile einfügen Java Basics - Anfänger-Themen 2
Corben Input/Output FileOutputStream - neue Zeile mit write(10) Java Basics - Anfänger-Themen 6
K in Konstruktor neue Objekte einer anderen Klasse erzeugen Java Basics - Anfänger-Themen 9
S Datenströne - Text in eine Datei einlesen, umwandeln und in eine neue Datei schreiben Java Basics - Anfänger-Themen 6
F Neue Klasse mag nicht - nullPointerException Java Basics - Anfänger-Themen 6
L String suchen und ersetzten, ohne neue Datei Java Basics - Anfänger-Themen 4
X FileHandler: neue Datei erzeugen Java Basics - Anfänger-Themen 2
U Java neue Variable für jeden Schleifendurchgang Java Basics - Anfänger-Themen 11
K Neue Menge aus zwei Mengen konstruieren Java Basics - Anfänger-Themen 3
Luk10 Dateipfad beim Laden einer Datei + Neue kleine Frage! Java Basics - Anfänger-Themen 11
Hindi93 Neue Libs - wohin damit? Java Basics - Anfänger-Themen 7
G JUnit ist das neue main() Java Basics - Anfänger-Themen 16
M neue Zufallszahl in Schleife Java Basics - Anfänger-Themen 2
M java neue datei erstellen Java Basics - Anfänger-Themen 6
V Scanner Einlese aus Datei in neue Datei? Java Basics - Anfänger-Themen 8
Haubitze_Broese neue Klasse? Java Basics - Anfänger-Themen 6
F Neue Panelgröße nach Fenster maximieren Java Basics - Anfänger-Themen 5
S FileWriter - in neue Zeile schreiben!? Java Basics - Anfänger-Themen 19
P OOP Automatisch neue Objekte erstellen Java Basics - Anfänger-Themen 14
L Neue Zeile JTable Java Basics - Anfänger-Themen 13
B Eine neue Klasse in anderen Projekten nutzen Java Basics - Anfänger-Themen 5
W neue Variablen in Schleife anlegen Java Basics - Anfänger-Themen 13
S GridBagLayout neue Objekte hinzufügen Java Basics - Anfänger-Themen 3
M Action als neue Klasse Java Basics - Anfänger-Themen 2
B Teile einer Image in neue Image kopieren Java Basics - Anfänger-Themen 4
E Neue zeile in string Java Basics - Anfänger-Themen 3
L Mit Array neue Objekte erzeugen Java Basics - Anfänger-Themen 3
R Zeichnung entfernen und neue Zeichnen lassen Java Basics - Anfänger-Themen 20
R Neue GUI öffnen und die Alte schließen Java Basics - Anfänger-Themen 6
J ArrayList<Point> in eine neue ArrayList<Point> kopieren Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben