Вы можете использовать линейный градиент сделать это внутри метода, где вы должны каждый раз указывать цвет:
private void changeColor(String color){
if(color == null){
color = "transparent";
}
circle.setStyle("-fx-fill:linear-gradient(from 100.0% 100.0% to 100.0% 0.0%, rgb(77,102,204) 0.5," + color +" 0.5);");
}
Вот демо:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
public class Launcher extends Application{
private Pane root = new Pane();
private Scene scene;
private Circle circle = new Circle(200, 200, 100);
private Button btn = new Button("Change");
private boolean change = false;
@Override
public void start(Stage stage) throws Exception {
btn.setOnAction(evt->{
if(change){
change = !change;
changeColor("red");
}else{
change = !change;
changeColor("transparent");
}
});
changeColor("green");
root.getChildren().addAll(btn,circle);
scene = new Scene(root,400,400);
stage.setScene(scene);
stage.show();
}
private void changeColor(String color){
if(color == null || color.isEmpty()){
color = "transparent";
}
circle.setStyle("-fx-fill:linear-gradient(from 100.0% 100.0% to 100.0% 0.0%, rgb(77,102,204) 0.5," + color +" 0.5);");
}
public static void main(String[] args) {
launch(args);
}
}
Это просто простой метод вы можете найти лучший и более мощный пример, я думаю, удачи!
Хорошая идея. Но как я могу поместить прямоугольник в круг? – user3161584