Hintergrundfarbe laufend verändern

Status
Nicht offen für weitere Antworten.

Bibi

Mitglied
Hallo,

ich habe ein Problem mit setBackground.
Die Methode farbverlauf() soll einen Farbverlauf zwischen zwei angegebenen Farben erzeugen. Angezeigt wird der Verlauf als Hintergrundfarbe eines JTextField (anzeigeGross).
Hierfür habe ich ersteinmal versucht eine Farbe Grün zu erzeugen und pro Schleifenumlauf den g-Wert der RGB-Farbe um eins zu verringern. Die Farbe soll jeweils angezeigt werden.

Genau da liegt das Problem, sobald die Methode gestartet wird verringert sich der g-Wert zwar, aber die Farbe wird nicht angezeigt, sie bleibt während des ganzen Schleifendurchlaufs auf der zuletzt angezeigten Farbe. Erst am Ende des Schleifendurchlaufs springt die Anzeige auf Schwarz.

Es scheint als würde der Befehl anzeigeGross.setBackground(farbe1) gar nicht durchlaufen, beim debuggen kann man aber sehen dass dies nicht der Fall ist.
Die Werte g und farbe1 ändern sich entsprechend, anzeigeGross ändert den Wert für Background

Kann mir jemand sagen wie ich die Hintergrundfarbe während des Schleifendurchlaufs anzeigen lassen kann?

Java:
private void farbverlaufTest() {
		r=0;
		g=255;
		b=0;
		farbe1 = new Color(0,255,0);
		//Color farbe2 = new Color(0,0,255);
		for (int p=0; p<255; p++){
			anzeigeGross.setBackground(farbe1);
			g -=1;
			//System.out.println("g: "+g);
			RGBtoHSV();
			farbe1 = Color.getHSBColor((float)h,(float) s, v);
			
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
	}	



	private void RGBtoHSV(){
		float[] hsv = Color.RGBtoHSB(r, g, b, new float[3]);
		h=hsv[0]*360;
		s=hsv[1];
		v=hsv[2];
	}
 

0din

Bekanntes Mitglied
ich hab mal keine ahnung was du mit dem RGBtoHSV machst... aber ehrlich gesagt muss ich das auch nich :D

Java:
	public void farbverlauf()
	{
		int r = 0;
		int g = 255;
		int b = 0;
		
		while(g > 0)
		{
			anzeigeGross.setBackground(new Color(r,g,b));
			g--;
			
			try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

		}
	}

ich habs nich getestet... aber damit sollte er in jedem schleifendurchlauf deinen g-wert um 1 reduzieren und auch anzeigen... wenn nich bin ich selbst auf die lösung gespannt ???:L
 

Bibi

Mitglied
Die RGBtoHSV Methode ist wohl noch aus voherrigen Versuchen übrig geblieben. Ich hab deinen Code ausprobiert, funktioniert leider genauso wenig wie meiner.

anzeigegross wird folgendermaßen in die GUI eingefügt

Java:
makeAnzeigeFenster(Color.getHSBColor((float) 0.7, (float) 0.5, 1));


private void makeAnzeigeFenster(Color Farbe) {
		
		//Anzeigefenster der aktuellen Farbe
		
		anzeigeGross = new JTextField();
		anzeigeGross.setEditable(false);
		anzeigeGross.setBackground(Farbe);
		c.gridx = 0;
		c.gridy = 0;
		c.gridwidth = 3;
		c.gridheight = 3;
		c.insets=new Insets(12,12,12,12);			
		c.ipadx=300;
		gbL.setConstraints(anzeigeGross, c);
		contentPane.add(anzeigeGross);
		
	}


Ist damit vielleicht etwas nicht in Ordnung?
 

0din

Bekanntes Mitglied
ich seh da so kein problem aber das wurmt mich grade auch n wenig...

würdeste mir vllt ma des ganze prog geben das ich da n wenig dran rum spiel un ma schau ob ich was find?
 

0din

Bekanntes Mitglied
Ok, damit tuts... aber Warum?

ebn für bibi:

Wir schreiben eine neue klasse bzw eine innerclass...
Java:
	public class Test2 implements Runnable
	{

		private JTextField tf;

		public Test2(JTextField jtf)
		{
			this.tf = jtf;
		}

		@Override
		public void run()
		{
			int r = 0;
			int g = 255;
			int b = 0;

			while (g > 0)
			{
				tf.setBackground(new Color(r, g, b));
				g--;

				try
				{
					Thread.sleep(100);
				}
				catch (InterruptedException e)
				{
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println(g);
			}
		}
	}

un gebrauchen tun wirs so:
Java:
		Thread t1 = new Thread(new Test2(anzeigeGross));
		t1.start();

Edit:
@Verjigorm
Verdammt ich hab 4min gebraucht...:autsch:
 
Zuletzt bearbeitet:

Verjigorm

Top Contributor
Weil ihr mit Thread.sleep() den EDT blockiert, der für dier GUI zuständig ist.
Mehr dazu im Swing-Forum

edit: Der Farbverlauf läuft aber nur nach Schwarz, nicht zurück ;)
 

0din

Bekanntes Mitglied
auf deutsch:
das sleep blockt die zeit die zum verändern nötig is un sobald der weiter geht, fängter wieder oben an?!

ich glaub ich nehm das mal als gegeben hin

Danke

Edit:
Der code soll ja auch nur richtung schwatt laufen?! So stehts zumindest schon im ersten code von bibi.
 

Bibi

Mitglied
ich seh da so kein problem aber das wurmt mich grade auch n wenig...

würdeste mir vllt ma des ganze prog geben das ich da n wenig dran rum spiel un ma schau ob ich was find?

Ich habe eine GUI worüber man Farben einlesen kann. Auf der GUI befindet sich ein Bild des CIE Diagramms, wenn man mit der Maus in das Bild klickt wird die jeweilige Farbe angezeigt. Das funktioniert auch soweit.

Java:
private void makeCIE() {
				
		cie = new ImageIcon(this.getClass().getResource("/images/cie.png"));
		
						
		label_cie = new JLabel(cie);
		label_cie.setSize(new Dimension(cie.getIconWidth(), cie.getIconHeight()));
			
		
		label_cie.setDoubleBuffered(true);					

		System.out.println("IconBreite:"+cie.getIconWidth());
		System.out.println("IconHöhe:"+cie.getIconHeight());
		System.out.println("Breite:"+label_cie.getWidth());
		System.out.println("Höhe:"+label_cie.getHeight());

		label_cie.addMouseMotionListener(this);
		label_cie.addMouseWheelListener(this);
		label_cie.addMouseListener(this);
		
		label_cie.setOpaque(true);			
		label_cie.setBackground(Color.BLACK);			
		c.gridx = 6;
		c.gridy = 0;
		c.gridwidth = GridBagConstraints.REMAINDER;
		c.gridheight=5;
		c.insets=new Insets(12,12,0,12);
		c.anchor=GridBagConstraints.NORTHEAST;
		
		gbL.setConstraints(label_cie, c);
		contentPane.add(label_cie);
		
	}

@Override
	public void mouseDragged(MouseEvent evt) {
		updateAnzeige();
		makePoints();
		draw(true);
		updateSliders();
	}

makePoints bildet mir ein Dreieck in dem Cie Diagramm ab
draw zeichnet einen kleinen kreis an die aktuelle stelle(an die stelle des MAuszeigers)
updateSliders zeigt die aktuellen RGB werte auf Schiebereglern an

Java:
public void updateAnzeige() 
	{
		berechneHS();
		color1[i] = Color.getHSBColor((float)h/360,(float) s, v);
		anzeigeGross.setBackground(color1[i]);
		System.out.println("color1[i]: "+color1[i]);
		System.out.println("i: "+i);
	}

in berechneHS werden die Farbwerte aus dem Diagramm in das HSV-Farbmodell umgerechnet
in color sollen später die ausgewählten Farbwerte gespeichert werden

diese Funktion greift also auch auf anzeigeGross zu
ansonsten befinden sich noch Buttons, und Auswahlknöpfe auf der Oberfläche, die aber bis jetzt noch keinerlei funktion haben.

den TestFarbablauf starte ich über einen Button TEST

Java:
private void makeTestButton() {
		
		//TestButton
		JButton buttonTest = new JButton("Test");
		buttonTest.addActionListener(this);
		buttonTest.setActionCommand("BT");
		c.fill=GridBagConstraints.NONE;
		c.anchor=GridBagConstraints.NORTH;
	
		c.gridx=1;
		c.gridy=3;
		c.gridwidth = 1;
		c.gridheight = 1;
		c.ipadx=0;
		
		gbL.setConstraints(buttonTest,c);
		contentPane.add(buttonTest);
		
	}



@Override
	public void actionPerformed(ActionEvent evt) {
		
		if (evt.getActionCommand().equals("ScBV")){
			int hv = i+1;
			str = Integer.toString(hv);
			textFeldAnzSc.setText(str);
			++i;
			System.out.println("color1[i]: "+color1[i]);
			System.out.println("i: "+i);
		}
		
		if (evt.getActionCommand().equals("ScBZ") && (i>0)){
			int hv = i-1;
			str = Integer.toString(hv);
			textFeldAnzSc.setText(str);
			i--;
			System.out.println("color1[i]: "+color1[i]);
			System.out.println("i: "+i);
		}
		
				
		if (evt.getActionCommand().equals("ZBV")){ 
			k += 0.1;
			System.out.println("k: "+k);
			DecimalFormat df=new DecimalFormat("0.0");
			textFeldZeit.setText(df.format(k));
		}
		
		if (evt.getActionCommand().equals("ZBZ")&&(k>0)){
			k -= 0.1;
			System.out.println("k: "+k);
			DecimalFormat df=new DecimalFormat("0.0");
			textFeldZeit.setText(df.format(k));
		}	
		
		if (evt.getActionCommand().equals("BT")){
		
			farbverlaufTest();
		}
	}


ich seh aber keinen Zusammenhang zwischen den einzelnen Funktionen, ich will ja für den Anfang erstmal irgeneinen Farbablauf darstellen, der mit der Auswahl aus dem Diagramm nichts zu tun hat.
 

0din

Bekanntes Mitglied
Das ma'n prog...

Nuja, die lösung steht oben schon drinne...
Wenn man des ganze, wie von Verjigorm vorgeschlagen, multithreaden lässt tuts.
 

0din

Bekanntes Mitglied
Eben für mich un mein verständnis bitte... ^^ ich weiß etwas nervig...

ich kann also in der kombi von mal-das-anders und sleep nicht im eigenen thread arbeiten sondern muss das sleep von der mal-das-anders-EDT entkoppeln?
also einen Thread zum mal-das-anders und einen der das mal-das-anders aufgibt und ne runde schläft?!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
B JPanel ändert die Hintergrundfarbe nicht Java Basics - Anfänger-Themen 2
M TableModel Hintergrundfarbe Java Basics - Anfänger-Themen 6
P Hintergrundfarbe aus drei Scrollbars Java Basics - Anfänger-Themen 5
B Die Hintergrundfarbe eines deaktivierten buttons ändern? Java Basics - Anfänger-Themen 4
I Netbeans - jTabbedPane Hintergrundfarbe ändern Java Basics - Anfänger-Themen 13
C Panel Hintergrundfarbe per AdjustmenListenmer ändern Java Basics - Anfänger-Themen 4
P DefaultTreeCellRenderer Hintergrundfarbe Java Basics - Anfänger-Themen 3
I Hintergrundfarbe einer Zelle in einer JTable Java Basics - Anfänger-Themen 10
P Hintergrundfarbe einer anderen Klasse ändern Java Basics - Anfänger-Themen 7
C Hintergrundfarbe Java Basics - Anfänger-Themen 7
U JPanel und Hintergrundfarbe Java Basics - Anfänger-Themen 5
S Hintergrundfarbe lässt sich nicht ändern Java Basics - Anfänger-Themen 3
S Hintergrundfarbe lässt sich nicht ändern Java Basics - Anfänger-Themen 2
B JTable und Hintergrundfarbe Java Basics - Anfänger-Themen 5
G Transparente Hintergrundfarbe eines Applets Java Basics - Anfänger-Themen 8
J Hintergrundfarbe für Textfelder Java Basics - Anfänger-Themen 4
G Hintergrundfarbe eines JLabels Java Basics - Anfänger-Themen 3
K Hintergrundfarbe einer Tabellen-Zelle verändern Java Basics - Anfänger-Themen 2
JavaBeginner22 Button Text verändern Java Basics - Anfänger-Themen 1
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
H OOP Werte mit Set verändern Java Basics - Anfänger-Themen 6
M Was muss ich verändern damit ich es so ausgegeben bekomme wie auf dem Foto? Java Basics - Anfänger-Themen 2
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
A Variablen zum final verändern Java Basics - Anfänger-Themen 4
A Kann man eine Methode als Variable speichern und danach noch verändern? Java Basics - Anfänger-Themen 6
S Verändern der Liniendicke Java Basics - Anfänger-Themen 5
V Vererbung Subklasse soll Superklasse verändern Java Basics - Anfänger-Themen 2
S werte von objekten in schleife verändern Java Basics - Anfänger-Themen 14
N Sicherheitsnummer erstellen und verändern können Java Basics - Anfänger-Themen 1
C Rekursiven Programmcode verändern Java Basics - Anfänger-Themen 11
A JLabel mit button drücken verändern Java Basics - Anfänger-Themen 6
J Wert bei Objekterzeugung verändern Java Basics - Anfänger-Themen 12
J Die Y Koordinate von einer anderen Klasse auch verändern Java Basics - Anfänger-Themen 1
L JTable Tagebuch Spaltenhöhe verändern Java Basics - Anfänger-Themen 3
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
D Mit Buttonklick Farbe der anderen Buttons verändern? Java Basics - Anfänger-Themen 2
G Im ActionListener eine "äußere" Variable verändern Java Basics - Anfänger-Themen 13
E RTF/DOC(x) textteile ersetzen/verändern Java Basics - Anfänger-Themen 0
W aus Methode auf JLabel zugreifen und Image verändern Java Basics - Anfänger-Themen 1
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
I For Schleife - Variable verändern Java Basics - Anfänger-Themen 4
C Im Array zählen und verändern Java Basics - Anfänger-Themen 5
C Finden und verändern Java Basics - Anfänger-Themen 1
J Erste Schritte String verändern Java Basics - Anfänger-Themen 3
S Rollen verändern, Interfaces austauschen wie? Java Basics - Anfänger-Themen 10
M Von einer Klasse aus, Objekte einer anderen Klasse verändern. Java Basics - Anfänger-Themen 2
Streeber Jar dekompilieren, Code verändern und als .jar speichern Java Basics - Anfänger-Themen 5
K Windows Kontextmenü verändern Java Basics - Anfänger-Themen 5
M Zahlen verändern nach Zeit Java Basics - Anfänger-Themen 6
TheSorm Obercalsse von Unterclasse verändern Java Basics - Anfänger-Themen 3
C Input/Output Hilfe..txt Datei zeile verändern und Ausgabe ..Hilfe Java Basics - Anfänger-Themen 11
L Platz auf JButtons verändern Java Basics - Anfänger-Themen 18
O Bereits "gepostete" Strings in der Konsole verändern? Java Basics - Anfänger-Themen 2
G über JButton Action einen anderen Button verändern Java Basics - Anfänger-Themen 7
J Android R.Java verändern!? Java Basics - Anfänger-Themen 6
M Felder mit Methode verändern Java Basics - Anfänger-Themen 11
I Shortcut verändern Java Basics - Anfänger-Themen 9
P GUI - Layout per Laufzeit erstellen/verändern? Java Basics - Anfänger-Themen 6
S String verändern Java Basics - Anfänger-Themen 15
I Im JFrame Inhalte verändern per Methode aus anderer Class Java Basics - Anfänger-Themen 5
K In ArrayList Daten verändern Java Basics - Anfänger-Themen 8
M Klassen Durch den ActionListener das GUI einer anderen Klasse verändern Java Basics - Anfänger-Themen 8
J Collections Auf ein bestimmtes Objekt in der Liste zugreifen und Werte verändern + Anschließend Sortieren... Java Basics - Anfänger-Themen 8
F Klassenübergreifend String verändern Java Basics - Anfänger-Themen 5
R Benutzeroberfläche verändern Java Basics - Anfänger-Themen 4
H BufferedImage DPI verändern Java Basics - Anfänger-Themen 5
J Mit JS, Text und Bilder von Webseite verändern... Java Basics - Anfänger-Themen 10
X Collections Reihenfolge bestimmter Objekte in einer ArrayList verändern Java Basics - Anfänger-Themen 2
B ComboBox(editable) - Text verändern Java Basics - Anfänger-Themen 7
S String dauerhaft mit replaceAll verändern Java Basics - Anfänger-Themen 3
V "TAB" komplett verändern Java Basics - Anfänger-Themen 10
Z Anzahl der Stellen nach dem Komma verändern. Java Basics - Anfänger-Themen 7
C ComboBoxModel mit Daten der Datenbank verändern Java Basics - Anfänger-Themen 2
C jPanel im jPanel verändern Java Basics - Anfänger-Themen 15
B JPanel nachträglich verändern Java Basics - Anfänger-Themen 20
StrikeTom *.txt-datei verändern|wie? Java Basics - Anfänger-Themen 5
S Eigenes Objekt temporär verändern? (Clone)? Java Basics - Anfänger-Themen 12
E Breite des Schiebers in JscrollPane verändern Java Basics - Anfänger-Themen 2
J Ausgelesenen Dateipfad verändern Java Basics - Anfänger-Themen 5
B Ausgabe verändern Java Basics - Anfänger-Themen 6
L Methode über for-schleife aufrufen und verändern Java Basics - Anfänger-Themen 7
L Methode über for-schleife aufrufen und verändern Java Basics - Anfänger-Themen 5
R Textdatei im Internet verändern... Java Basics - Anfänger-Themen 4
B Collection während Iteration verändern Java Basics - Anfänger-Themen 7
D .class-Datei innerhalb einer .jar-Datei verändern Java Basics - Anfänger-Themen 4
F Verändern einer Variable im ActionListener Java Basics - Anfänger-Themen 14
A Von einer Klasse aus die Eingabe einer anderen verändern Java Basics - Anfänger-Themen 3
D kleine Passwortabfrage erstellen incl. Method zum verändern Java Basics - Anfänger-Themen 7
G Variable welche in anderer Klasse liegt, verändern. Java Basics - Anfänger-Themen 2
M Text in Konsole schreiben, den man irgendwie verändern kann. Java Basics - Anfänger-Themen 9
G JLabel nachträglich verändern, bzw. ImageIcon ändern? Java Basics - Anfänger-Themen 3
C Bild in JTable verändern (nach einem Klick auf Zelle) Java Basics - Anfänger-Themen 4
P Array in einer Methode verändern Java Basics - Anfänger-Themen 6
M JTable grösse verändern Java Basics - Anfänger-Themen 6
F [Map] Eintrag gezielt verändern Java Basics - Anfänger-Themen 3
T GridLayout % Verändern? Java Basics - Anfänger-Themen 3
B Button Text auf Knopfdruck verändern Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben