Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何绑定更改按钮和rgb滑块JavaFX_Java_Javafx - Fatal编程技术网

如何绑定更改按钮和rgb滑块JavaFX

如何绑定更改按钮和rgb滑块JavaFX,java,javafx,Java,Javafx,例如,我在颜色更改文本字段中键入颜色,按下按钮,颜色将更改,因此我希望rgb滑块获得此颜色 例如,我键入白色并按下按钮,滑块需要更改为255 package sample; import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.geometry

例如,我在颜色更改文本字段中键入颜色,按下按钮,颜色将更改,因此我希望rgb滑块获得此颜色

例如,我键入白色并按下按钮,滑块需要更改为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);
}
}
您有滑块的changeListeners,因此不需要更新标签。您可以省略red.setText+redd;及其他
clbtn.setOnAction(event -> {
    circle.setFill(Color.web(colour.getText()));
});
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);
});
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);
    });