Reputation: 3
For example I type color in Color Change TextField press the button the color changes and so I want the rgb sliders to "obtain" this colour.
For example I type white and press the button sliders need to change to 255 255 255.
package sample;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.StrokeType;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import java.text.DecimalFormat;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
GridPane root = new GridPane();
GridPane grid = new GridPane();
grid.setPadding(new Insets(10, 10, 10, 10));
grid.setVgap(10);
grid.setHgap(70);
//Circle creation
Circle circle = new Circle(150, Color.rgb(0,0,0));
circle.setStrokeType(StrokeType.CENTERED);
circle.setOpacity(0.5);
circle.minHeight(150);
circle.minWidth(170);
circle.setStroke(Color.web("green"));
circle.setStrokeWidth(5);
//adding circle to root group
root.getChildren().add(circle);
//Opacity Slider
Slider opacity = new Slider();
opacity.setMin(0);
opacity.setValue(0.5);
opacity.setMax(1);
Text opacitylevel = new Text("0.5");
javafx.scene.control.Label opacityCaption = new Label("Opacity Level:");
grid.add(opacityCaption,0,1);
grid.add(opacity,1,1);
grid.add(opacitylevel,2,1);
//Colour Change
TextField colour = new TextField();
javafx.scene.control.Label Colour = new Label("Change Colour:");
grid.add(Colour,0,2);
grid.add(colour,1,2);
Button clbtn = new Button("Change Colour");
clbtn.setPrefSize(200,10);
grid.add(clbtn,1,3);
//formatting
DecimalFormat df = new DecimalFormat("#.##");
opacity.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) {
circle.setOpacity(new_val.doubleValue());
opacitylevel.setText(df.format((double)new_val));
}
});
//R G B
Slider R = new Slider();
R.setMin(0);
R.setValue(0);
R.setMax(255);
Text red = new Text("0");
javafx.scene.control.Label Rt = new Label("Red:");
grid.add(Rt,0,4);
grid.add(R,1,4);
grid.add(red,2,4);
Slider G = new Slider();
G.setMin(0);
G.setValue(0);
G.setMax(255);
Text green = new Text("0");
javafx.scene.control.Label Gt = new Label("Green:");
grid.add(Gt,0,5);
grid.add(G,1,5);
grid.add(green,2,5);
Slider B = new Slider();
B.setMin(0);
B.setValue(0);
B.setMax(255);
Text blue = new Text("0");
javafx.scene.control.Label Bt = new Label("Blue:");
grid.add(Bt,0,6);
grid.add(B,1,6);
grid.add(blue,2,6);
root.add(grid,1,0);
//creating scene
Scene scene = new Scene(root,800,600,Color.web("white"));
//centering circle
circle.setCenterX(170);
circle.setCenterY(150);
//Change Colour event
clbtn.setOnAction(event -> {
circle.setFill(Color.web(colour.getText()));
});
//RGB events
//red
R.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) {
red.setText("" + new_val.intValue());
circle.setFill(Color.rgb(new_val.intValue(),Integer.parseInt(green.getText()),Integer.parseInt(blue.getText())));
}
});
//green
G.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) {
green.setText("" + new_val.intValue());
circle.setFill(Color.rgb(Integer.parseInt(red.getText()),new_val.intValue(),Integer.parseInt(blue.getText())));
}
});
//blue
B.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) {
blue.setText("" + new_val.intValue());
circle.setFill(Color.rgb(Integer.parseInt(red.getText()),Integer.parseInt(green.getText()),new_val.intValue()));
}
});
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
I could realize it myself but I don't understand how to get red green and blue separate from web color.
Button code for the easier search.
clbtn.setOnAction(event -> {
circle.setFill(Color.web(colour.getText()));
});
Upvotes: 0
Views: 916
Reputation: 3
clbtn.setOnAction(event -> {
circle.setFill(Color.web(colour.getText()));
Color rgb = Color.web(colour.getText());
double redd = rgb.getRed() * 255;
red.setText("" + redd);
R.setValue(redd);
double greenn = rgb.getGreen() * 255;
green.setText("" + greenn);
G.setValue(greenn);
double bluee = rgb.getBlue() * 255;
blue.setText("" + bluee);
B.setValue(greenn);
});
Upvotes: 0
Reputation: 2734
clbtn.setOnAction(event -> {
Color color = Color.web(colour.getText());
R.setValue(color.getRed() * 255);
G.setValue(color.getGreen() * 255);
B.setValue(color.getBlue() * 255);
circle.setFill(color);
});
Upvotes: 1