# Unterschiedliche Farben erzeugen



## downset04 (10. November 2005)

Hallo
Ich möchte Random Farben erzeugen nur das ->

```
rval = (int)Math.floor(Math.random() * 256);
gval = (int)Math.floor(Math.random() * 256);
bval = (int)Math.floor(Math.random() * 256);		
Color c = new Color(rval,gval,bval);
```
erzeugt ca 80% Rot? wie kann ich das ändern? dass auch leuchtende Farben zb Blau usw mal rauskommt? die Farbenvielfalt ist sehr schlecht!


----------



## MasterHimself (10. November 2005)

benötigts du wirklich die 24 bit Farben, die du damit darstellen könntest, oder reichen dir auch z.B. 256 farben? Dann könntest du z.B. einfach (int) (Math.floor(Math.random() * 8) * 32) nehmen, dadurch erhälts du nicht soviele Farbabstufungen, und solltest auch nicht sooft rot erhalten.


----------



## downset04 (10. November 2005)

komisch auch mit deiner Funktion schauts nicht viel anderst aus? sind ziemlich dunkle Farben so dunkelrot schwarz ganz wenig dunkelblau aber dunkelrot ca 70%? gibts doch nicht dass man da nicht unterschiedliche Farben kriegt?


----------



## teppi (10. November 2005)

Hm also bei mir funktioniert das sehr gut .. 

```
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.event.*;
import java.awt.*;


public class RandomColor extends JFrame implements ActionListener {

	private JPanel jContentPane = null;
	private JButton jButton = null;
	public static void main(String[] args){
		RandomColor myrc = new RandomColor();
	}
	
	
	/**
	 * This is the default constructor
	 */
	public RandomColor() {
		super();
		initialize();
		this.setVisible(true);
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(300, 200);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.setBackground(new java.awt.Color(238,238,85));
			jContentPane.add(getJButton(), java.awt.BorderLayout.NORTH);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setText("Randomize");
			jButton.addActionListener(this);
		}
		return jButton;
	}


	public void actionPerformed(ActionEvent e) {
		int rval = (int)Math.floor(Math.random() * 256);
		int gval = (int)Math.floor(Math.random() * 256);
		int bval = (int)Math.floor(Math.random() * 256);		
		Color c = new Color(rval,gval,bval);
		this.jContentPane.setBackground(c);
		
	}

}
```


----------



## downset04 (10. November 2005)

Hallo - Ich erzeuge schnell hintereinander in einer for Schleife die Zahlen? ich glaub das hängt damit zusammen dass der Zeitabstand zu gering ist?


----------



## teppi (10. November 2005)

Ja .. da liegt wohl der Hund begraben. Due Math.random Funktion basiert so weit ich weiß auf der Systemzeit.

Schau dir mal diese Klasse an:

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Random.html

Da kannst du mit nextInt() usw. jeweils neue Zahlen aus einem Objekt holen. Ich denke, dies wird bessere Resultate liefern.

Gruß Stefan


----------



## downset04 (10. November 2005)

nein liefert auch nix besseres!


----------



## illaX (11. November 2005)

Hi,


```
Random rand = new Random();
        for(int i = 0; i < 15; i++) {
            System.out.println(rand.nextInt(256));
        }
```

Ergebnis:
207
52
43
136
55
253
78
87
121
235
32
123
14
227
5


zufaellig genug?


----------

