JavaFx Zufallsfarbe beim Button-Klick

Sandro95

Bekanntes Mitglied
guten tag leute ,
ich versuche seit gestern eine Zufallsfarbe per Button Klick zu implementieren.
Habe mich schlau gemacht , dennoch klappt es bei mir nicht und ich weiß nicht woran das liehgt .
Andere aus dem Netz haben das ebenso so gelöst.Vlt kann ja einer kurz drüber schauen und mir einen Tipp geben

viele dank leute!
 

Anhänge

Moin,

bitte poste Deinen Code mit Code-Tags (siehe meine Signatur)!
Nicht jeder wird 'irgendeine' ZIP-Datei öffnen wollen, außerdem ist leserlicher und besser zitierbar!

Danke und Gruß
Klaus
 
meinste so ?



Java:
import java.util.Random;
import java.util.Scanner;

import com.sun.prism.paint.Color;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;

import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Fenster extends Application {
   
    public  void start(Stage primstage) {
       
        //Fenster art
        BorderPane border = new BorderPane();
       
        //Hbox für den Button
        HBox box = new HBox();
        //die Hbox nach unten setzen
        border.setBottom(box);
        //die HBox unten mittig setzen
        box.setAlignment(Pos.CENTER);
        // abstand zu den rändern
        box.setPadding(new Insets(10));
       
       
       
        Rectangle viereck = new Rectangle();
       
       
        viereck.setX(125);
        viereck.setY(100);
        viereck.setWidth(150);
        viereck.setHeight(150);
       
        Button wechsel = new Button("Farbenwechsel");
       
        wechsel.setPadding(new Insets(10));
       
       


        //das Viereck an der Pane hinzufügen
        border.getChildren().add(viereck);
        //den Button an der Hbox hinzufügen
        box.getChildren().add(wechsel);
       
        Scene szene = new Scene(border,400,400);
        primstage.setScene(szene);
        primstage.show();
       
        wechsel.setOnAction((ActionEvent e)-> {
            float farbe1 = (float) Math.random();
            float farb2  = (float) Math.random();
            float farbe3  = (float) Math.random();
           
            Random rnd = new Random();
         Color color = new Color(rnd.nextInt(),rnd.nextInt(),rnd.nextInt());
           
           
           
        });
       
       

       
       
       
       
    }

    public static void main(String[] args) {
        launch();
    }

   
}
 
Zuletzt bearbeitet von einem Moderator:
Hab es mir angesehen, die setOnAction ist noch nicht richtig, hier mal mit 27 unterschiedlichen Farben:
Java:
	private static List<int[]> rgbs = new ArrayList<>();

	private static void iniRnd(int i, int[] rgb) {
		if (i == 3) {
			rgbs.add(rgb.clone());
			return;
		}
		for (int j = 0; j < 3; j++) {
			if (j == 0) {
				rgb[i] = 0;
			} else {
				rgb[i] = (j * 128) - 1;
			}
			iniRnd(i + 1, rgb);
		}
	}

	public static Color getRnd() {
		if (rgbs.isEmpty()) {
			iniRnd(0, new int[3]);
		}
		Collections.shuffle(rgbs);
		int[] a = rgbs.get(0);
		return new Color(a[0], a[1], a[2]);
	}

	public static void main(String[] args) {
		System.out.println(getRnd().toString());
		System.out.println(rgbs.size());
	}
 
Hab es mir angesehen, die setOnAction ist noch nicht richtig, hier mal mit 27 unterschiedlichen Farben:
Java:
    private static List<int[]> rgbs = new ArrayList<>();

    private static void iniRnd(int i, int[] rgb) {
        if (i == 3) {
            rgbs.add(rgb.clone());
            return;
        }
        for (int j = 0; j < 3; j++) {
            if (j == 0) {
                rgb[i] = 0;
            } else {
                rgb[i] = (j * 128) - 1;
            }
            iniRnd(i + 1, rgb);
        }
    }

    public static Color getRnd() {
        if (rgbs.isEmpty()) {
            iniRnd(0, new int[3]);
        }
        Collections.shuffle(rgbs);
        int[] a = rgbs.get(0);
        return new Color(a[0], a[1], a[2]);
    }

    public static void main(String[] args) {
        System.out.println(getRnd().toString());
        System.out.println(rgbs.size());
    }



geht das ganze nicht einfacher ?🧐
 
das funktioniert so iwie nicht , die Methode ist undefiniert steht dort dann
Ist ja auch klar, du benutzt nicht JavaFX Color (blame myself). Ich kann aber die docs zu com.sun.prism.paint.Color nicht finden spontan, hast du docs dazu?



Edit:
Ah habe zumindest etwas SourceCode gefunden.

Java:
new Color(Math.random(), Math.random(), Math.random(), 1f)
Siehe https://jar-download.com/artifacts/...11/source-code/com/sun/prism/paint/Color.java

Das sollte passen. Der letzte Wert ist Transparenz. Wenn der auch zufällig sein soll musst du den noch ändern.
 
Zuletzt bearbeitet:
Ist ja auch klar, du benutzt nicht JavaFX Color (blame myself). Ich kann aber die docs zu com.sun.prism.paint.Color nicht finden spontan, hast du docs dazu?



Edit:
Ah habe zumindest etwas SourceCode gefunden.

Java:
new Color(Math.random(), Math.random(), Math.random(), 1f)
Siehe https://jar-download.com/artifacts/...11/source-code/com/sun/prism/paint/Color.java

Das sollte passen. Der letzte Wert ist Transparenz. Wenn der auch zufällig sein soll musst du den noch ändern.

Funktioniert ebenfalls nicht, wieder undefiniert ..
 
Naja, dein Code macht ja auch nichts mit der Color...

(und bitte verzichte auf alles was aus com.sun.* kommt, die Dinge direkt aus JavaFX sind schon passend 🙂 )
 

Neue Themen


Zurück
Oben