Möglichkeit mit Listerners die Farbe meiner Objekte zu ändern

Zidinjo

Mitglied
Hallo liebe Community,

ich bin grade dabei ein wenig zu programmieren und nun stehe ich irgendwie vor einem Problem. Ich kann dieses Problem irgendwie nicht lösen, vielleicht weiß ein erfahrenderer programmiere dort abhilfe.

Meine Klasse von der ich erbe :

Java:
package de.marvin.oopLabor3;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class GeometricObject extends JPanel implements MouseListener, MouseMotionListener
{
	private static final long serialVersionUID = 1L;
	private int fensterGroesse = 600;
	private int randomAuswahl;
	private int gridX = 8;
	private int gridY = 8;
	private final int MAXRANDOM = 5;
	private final int MINRANDOM = 1;
	private final int MAXCOLOR = 240;
	private final int RedBorderSize = 40;
		
	public  void felderErstellung()
	{
		JFrame f = new JFrame("Laboraufgabe 3");
		f.setSize(fensterGroesse,fensterGroesse);
		f.setLocationRelativeTo(null);
		f.setLayout(new GridLayout(gridX,gridY));
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setResizable(false);
			
		for(int i = 0; i < (gridX*gridY);i++)
		{
			randomAuswahl = randInt(MINRANDOM,MAXRANDOM);
			switch(randomAuswahl)
			{
				case 1:
					f.add(new Square());
					break;
				case 2:
					f.add(new Circle());
					break;
				case 3:
					f.add(new Triangle());
					break;
				case 4:
					f.add(new Pacman());
					break;
				case 5:
					f.add(new MySpecialShape());
					break;
			}
		}
		f.setVisible(true);
	}
	
	protected int randInt(int min, int max) 
	{
	    Random rand = new Random();
	    int randomNum = rand.nextInt((max - min) + 1) + min;

	    return randomNum;
	}
	
	protected  int[] setRelativeSize()
	{
		int FillViereck = randInt(MINRANDOM,MAXRANDOM); //Muss gleiche größe haben, deshalb eine Variable
	
        final Dimension dBorder = getSize();  // Bekomme die höhe und weite als Dimension Object back
        final Dimension dFill = new Dimension(dBorder.width /FillViereck, dBorder.height /FillViereck); // Erstelle selbst ein neues Object
        final Point p0Fill = new Point((dBorder.width - dFill.width) / 2,(dBorder.height - dFill.height) / 2); // X u Y Wert
        int[] koordinaten = {p0Fill.x,p0Fill.y, dFill.width, dFill.height};

        return koordinaten;
	}
	
	protected void kastenErstellen(Graphics g)
	{
		g.setColor(Color.RED); //Vorgegeben
		g.drawRect(getWidth()/RedBorderSize,getHeight()/RedBorderSize,getWidth()-2,getHeight()-2); // Sonst sind die L
	}
	
	protected void setColor(Graphics g)
	{
		g.setColor(new Color(randInt(MINRANDOM,MAXCOLOR),randInt(MINRANDOM,MAXCOLOR),randInt(MINRANDOM,MAXCOLOR)));
	}
	
	public void mouseClicked(MouseEvent event)
	{
		System.out.println("hello");
	}
	
	public void mousePressed(MouseEvent event)
	{
		System.out.println("hello");
	}
	
	public void mouseReleased(MouseEvent event)
	{
		
	}
	
	public void mouseEntered(MouseEvent event)
	{
		
	}
	
	public void mouseExited(MouseEvent event)
	{
		
	}
	
	//These are mousemoition
	
	public void mouseDragged(MouseEvent event)
	{
		
		
	}
	
	public void mouseMoved(MouseEvent event)
	{
		System.out.println("eigentlich rot");
	}

}

Z.b Square die Farbe ändern.

Java:
package de.marvin.oopLabor3;

import java.awt.Graphics;

public class Square extends GeometricObject
{
	private static final long serialVersionUID = 1L;
	
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		int[] koordinaten = setRelativeSize();
		
		setColor(g);
		g.fillRect(koordinaten[0], koordinaten[1], koordinaten[2],koordinaten[3]);

		addMouseMotionListener(new GeometricObject());
		kastenErstellen(g);
	}
}

Weiß jemand wie ich in der Methode

Java:
	public void mouseMoved(MouseEvent event)
	{
		System.out.println("eigentlich rot");
	}

mein Objekt von Typ Square die Farbe ändern kann ? Ich kann ja nicht eine neue Instanz der Klasse Square erstellen und dort dann den Datentyp Graphics übergeben und dann die Farbe ändern, weil er sonst ja tausende machen würde.

Mit freundlichen Grüßen

Zidi
 

Gucky

Top Contributor
Du speicherst die Farbe nicht im Graphics Objekt sondern in einer Variable vom Typ Color in der Klasse Square.
Dann überschreibst du setColor, setzt dabei die Variable und benutzt diese in paintComponent.
 

Zidinjo

Mitglied
Ja, aber wie kann ich den darauf vom

Java:
public void mouseMoved(MouseEvent event)
	{
		
	}

zugreifen? Geht ja noch immer nicht :D
 

Gucky

Top Contributor
Jetzt sehe ich das.
Dann machst du GeometricObject abstract und lässt die mouseMoved Methoden von den Subklassen implementieren. Im Konstruktor rufst du super.addMouseListener(this) auf.
 

Zidinjo

Mitglied
Sorry aber habe noch nicht so viel Erfahrung mit den Listeners. Habe alles gemacht was du gesagt hast, aber wie kann ich die Farbe den ändern ? Irgendwie muss ich doch was übergeben, damit in der mehtode mein Objekt die Farbe wechselt^^
 

Gucky

Top Contributor
Du hast abstract GeometricObject extends JPanel implements MouseListener.
Dann hast du noch Square extends GeometricObject.
In Square implementierst du mouseMoved. In mouseMoved rufst du g.setColor(FARBE) auf. In paintComponent belegst du eine Klassenvariable Graphics g mit dem Graphics Objekt aus paintComponent mit this.g = g;
 

Zidinjo

Mitglied
Dies hatte ich mir auch gedacht, Überschreibt er nicht die Farbe? weil sich nichts rührt :D

Java:
package de.marvin.oopLabor3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;

public class Square extends GeometricObject
{
	private static final long serialVersionUID = 1L;
	Graphics g;
	
	public Square()
	{
		super.addMouseMotionListener(this);
	}

	@Override
	void specialPaint(Graphics g, int StartX, int StartY, int size1, int size2) 
	{
		this.g = g;
		setColor(g);
		g.fillRect(StartX, StartY, size1, size2);
		kastenErstellen(g);
	}
	
	@Override
	public void mouseMoved(MouseEvent event)
	{
		g.setColor(Color.blue);
	}
}
 

Zidinjo

Mitglied
Danke Gucky, klappt jetzt. Kurze Frage ist das normal, das die Farbe sich sehr schnell ändert ? Könnte man das auch einstellen, dass sich die Farbe nur 1 mal ändert wenn man rüberfährt ?
 

Gucky

Top Contributor
Kannst du es dir vorstellen, kannst du es auch programmieren aber ich verstehe nicht ganz, was du meinst.
Du könntest statt MouseMoved MousEntered überschreiben.
 

Zidinjo

Mitglied
Gucky :D bist echt eine Maschine. Das nächste Problem folgt zugleich. Nun möchte ich die Größe meiner Objekte ändern. Wenn ich dies tu, dann bleiben die "älteren" gezeichneten Objekte im Jpanel drine. Kann man dies irgendwie clearen ? Habe schon gegoogelt aber remove usw hilft nichts.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
_user_q Gibt es eine Möglichkeit, in Java alle möglichen Zeichen automatisch tippen zu lassen? AWT, Swing, JavaFX & SWT 13
U Gibt es eine Möglichkeit statt concatenate einen anderen Befehl zu nutzen? AWT, Swing, JavaFX & SWT 9
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
VPChief Gibt es eine möglichkeit Dateien aus der jar datei zu kopieren? AWT, Swing, JavaFX & SWT 46
C AWT Vollbild Anwenung. Beste Möglichkeit? AWT, Swing, JavaFX & SWT 6
W Welche Text ausgabe möglichkeit ist geeignet... AWT, Swing, JavaFX & SWT 6
U Beste Möglichkeit JTable-Änderungen in DB zu schreiben? AWT, Swing, JavaFX & SWT 14
E Kalender mit der Möglichkeit mehrere Tage zu selectieren AWT, Swing, JavaFX & SWT 3
M Einfache Möglichkeit einen Login Dialog zu bauen? AWT, Swing, JavaFX & SWT 1
D Drag and Drop-Möglichkeit wird von Komponenten verdeckt! AWT, Swing, JavaFX & SWT 2
S aktuelle möglichkeit images zu laden? AWT, Swing, JavaFX & SWT 2
D JSpinner ohne Edit Möglichkeit AWT, Swing, JavaFX & SWT 5
K Möglichkeit, HTML Tagstruktur im GUI sichtbar zu machen? AWT, Swing, JavaFX & SWT 2
O Welche Möglichkeit zum Focus setzen! AWT, Swing, JavaFX & SWT 2
O Suche einfache Möglichkeit zum Speichern AWT, Swing, JavaFX & SWT 21
S Gibt es eine Möglichkeit???? AWT, Swing, JavaFX & SWT 2
H JavaFX PixelWriter.setColor setzt Farbe nicht AWT, Swing, JavaFX & SWT 2
F Progressbar Farbe AWT, Swing, JavaFX & SWT 6
jojoge Wie erstelle ich runde Buttons mit Farbe? AWT, Swing, JavaFX & SWT 1
Kotelettklopfer Frame ändert Farbe nicht AWT, Swing, JavaFX & SWT 12
Hatsi09 GUI Input Farbe ändern AWT, Swing, JavaFX & SWT 0
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
F Drag&Drop mit Transparenter Farbe bei PNG AWT, Swing, JavaFX & SWT 0
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
H JFreeChart BarDiagramm Balken der gleichen Serie unterschiedliche Farbe zuordnen AWT, Swing, JavaFX & SWT 2
cool_brivk24 Swing Button Farbe ändern AWT, Swing, JavaFX & SWT 2
R Farbe zu einem Eckpunkt generieren AWT, Swing, JavaFX & SWT 2
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
W Farbe des Fensters AWT, Swing, JavaFX & SWT 2
krgewb Swing JTree - Farbe von nodes ändern AWT, Swing, JavaFX & SWT 4
M Ausgabe der HSL oder RGB Zusammensetzung einer Farbe (JColorChooser AWT, Swing, JavaFX & SWT 1
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
C Arrow Farbe bei JComboBox AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
V LookAndFeel JSpinner Hintergrund Farbe mit Nimbus LaF AWT, Swing, JavaFX & SWT 0
X mouseover verändert ungewollt die farbe AWT, Swing, JavaFX & SWT 4
D Swing Farbe aus Pixel vom JFrame auslesen AWT, Swing, JavaFX & SWT 17
T Swing JScrollPane Farbe der Scrollbar AWT, Swing, JavaFX & SWT 3
J Swing Farbe wählen ohne JColorChooser 2 AWT, Swing, JavaFX & SWT 23
S Farbe von JButton ändern AWT, Swing, JavaFX & SWT 5
T Jbutton Click farbe ändern AWT, Swing, JavaFX & SWT 4
C AWT Wie setze ich die Farbe "leuchtetgrün"? AWT, Swing, JavaFX & SWT 4
B Swing Button Farbe AWT, Swing, JavaFX & SWT 3
M Hover-Farbe über Hintergrundfarbe legen AWT, Swing, JavaFX & SWT 3
N Farbe abziehen AWT, Swing, JavaFX & SWT 3
R Farbe von Buttons stimmt nicht AWT, Swing, JavaFX & SWT 2
B Cursor Farbe ändern AWT, Swing, JavaFX & SWT 6
Y LookAndFeel JTabbedPane: Tab-Farbe mit Nimbus setzen AWT, Swing, JavaFX & SWT 3
T DefaultTableCellRenderer Farbe bestimmter Zelle ändern AWT, Swing, JavaFX & SWT 2
D JComboBox jedes Item mit einer anderen Farbe AWT, Swing, JavaFX & SWT 10
P JLabel Farbe/Bild ändern aus MouseListener heraus AWT, Swing, JavaFX & SWT 3
P 2D-Grafik Neue Farbe für einen Teilbereich einer Linie? AWT, Swing, JavaFX & SWT 8
K 2D-Grafik Fehler beim Farbe auslesen AWT, Swing, JavaFX & SWT 3
T JTable Zellen Farbe AWT, Swing, JavaFX & SWT 13
D JTabel: Überschrift, Abstand zwischen Tabellen, Spalten-Farbe ändern AWT, Swing, JavaFX & SWT 2
D Swing JTable, Zellen-Farbe über Koordinaten ändern AWT, Swing, JavaFX & SWT 9
N SWT-Widgets in Farbe AWT, Swing, JavaFX & SWT 21
F JButton Text-Farbe bei Disabled AWT, Swing, JavaFX & SWT 2
C Farbe eines ToolTipTextes eines Buttons AWT, Swing, JavaFX & SWT 4
D JTabbedPane - Farbe ändern im Bereich hinter den Reitern AWT, Swing, JavaFX & SWT 2
Q 3D-Grafik Cube Farbe setzen zur Laufzeit. AWT, Swing, JavaFX & SWT 10
I Schrift und Farbe formatieren, und zwar pro Linie... AWT, Swing, JavaFX & SWT 4
A SWT - Farbe von Text auf Label ändern AWT, Swing, JavaFX & SWT 2
M Combobox soll Farbe einer Komponente setzen AWT, Swing, JavaFX & SWT 2
N Swing JEditorPane mit Farbe und Font AWT, Swing, JavaFX & SWT 2
chik Button beschriften und Farbe zufällig anordnen AWT, Swing, JavaFX & SWT 2
S JSlider Track Breite und Farbe AWT, Swing, JavaFX & SWT 2
D SWT TabItem Farbe der Schrift ändern AWT, Swing, JavaFX & SWT 3
L JFreeChart Farbe von Balken AWT, Swing, JavaFX & SWT 5
C Welche Farbe hat die Auswahl in einer JTable? AWT, Swing, JavaFX & SWT 2
O AWT Zeichne mit eigener Farbe AWT, Swing, JavaFX & SWT 3
N Farbe einer einzelnen Zeile einer JTable ändern AWT, Swing, JavaFX & SWT 10
S JSplitPane ändert Farbe nicht AWT, Swing, JavaFX & SWT 4
O Hgr- Farbe einer JTable ändert sich nicht AWT, Swing, JavaFX & SWT 11
V JComboBox - Farbe in der Auswalliste AWT, Swing, JavaFX & SWT 7
GambaJo Farbe eines JFrames AWT, Swing, JavaFX & SWT 2
K Icon auf JButton mit Wechsel der Farbe AWT, Swing, JavaFX & SWT 2
D Farbe bei einem JButton wechseln AWT, Swing, JavaFX & SWT 4
L Farbe des Auswahlrechtecks bei selektierter Tabellenzeile AWT, Swing, JavaFX & SWT 9
M JComboBox Selected-Background Farbe AWT, Swing, JavaFX & SWT 5
K Farbe eines Pixels in einem Bild AWT, Swing, JavaFX & SWT 7
I JLabel Farbe AWT, Swing, JavaFX & SWT 1
L wie setze ich die Farbe des Pfeils in einer JComboBox? AWT, Swing, JavaFX & SWT 5
G Farbe der Markierung einer Componente ändern AWT, Swing, JavaFX & SWT 2
G JOptionPane mit andere Farbe AWT, Swing, JavaFX & SWT 8
G JFrame und Farbe AWT, Swing, JavaFX & SWT 4
M Farbe eines strings in JTextArea AWT, Swing, JavaFX & SWT 2
J JTree - Farbe von nodes ändern AWT, Swing, JavaFX & SWT 2
F Farbe für den Hintergrund eine BorderLayout-Teils AWT, Swing, JavaFX & SWT 5
G Bild mit transparente farbe für den IE6 AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben