javafx - 如何在 javafx 上选择一个形状来对其进行更改?
问题描述
如何选择一个形状(圆形、矩形等),以便在单击某些按钮时只编辑选定的形状?
这是代码:
package application;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.geometry.*;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.shape.*;
import javafx.scene.control.Button;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import java.util.Random;
public class CirclesAndSquares extends Application {
@Override
public void start(Stage primaryStage) {
/** set up the pane and boxes*/
BorderPane pane = new BorderPane();
HBox top = new HBox();
top.setAlignment(Pos.CENTER);
HBox bottom = new HBox();
bottom.autosize();
bottom.setAlignment(Pos.CENTER);
VBox left = new VBox();
left.autosize();
left.setAlignment(Pos.CENTER);
VBox right = new VBox();
right.autosize();
right.setAlignment(Pos.CENTER);
Pane center = new Pane();
center.autosize();
center.setStyle("-fx-border-color: black");
/** set and place the buttons */
Button btnRed = new Button("Red");
Button btnGrn = new Button("Green");
left.getChildren().addAll(btnRed, btnGrn);
Button btnRot = new Button("Rotate");
right.getChildren().add(btnRot);
Button btnSqr = new Button("Square");
Button btnCrcl = new Button("Circle");
bottom.getChildren().addAll(btnSqr, btnCrcl);
pane.setLeft(left);
pane.setRight(right);
pane.setTop(top);
pane.setBottom(bottom);
pane.setCenter(center);
/** Draw circle and square */
Rectangle square = new Rectangle();
center.getChildren().add(square);
Circle circle = new Circle();
center.getChildren().add(circle);
Shape shape;
btnCrcl.setOnAction(e -> {
circle.setRadius(50);
circle.setStroke(Color.BLACK);
circle.setFill(null);
circle.setCenterX(circle.getRadius()+5 + Math.random()*(center.getWidth() - 2*circle.getRadius()-5));
circle.setCenterY(circle.getRadius()+5 + Math.random()*(center.getHeight() - 2*circle.getRadius()-5));
} );
btnSqr.setOnAction(e -> {
square.setHeight(100);
square.setWidth(100);
square.setStroke(Color.BLACK);
square.setFill(null);
square.setX(Math.random()*(center.getWidth() - square.getWidth()));
square.setY(Math.random()*(center.getHeight() - square.getHeight()));
} );
Scene scene = new Scene(pane,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setTitle("Draw square and circle");
primaryStage.setScene(scene);
primaryStage.show();
btnRed.setOnAction(e -> {
if (true) {
System.out.println("true");
circle.setFill(Color.RED);}
} );
}
class CustomPane extends StackPane {
public CustomPane(Button btn) {
getChildren().addAll(btn);
setStyle("-fx-border-color: red");
setPadding(new Insets(11.5, 12.5, 13.5, 14.5));
}
}
public static void main(String[] args) {
launch(args);
}
}
这是它的样子:
当我点击“红色”时,我希望“选定的形状”用红色填充。
选择形状应通过单击“圆形”按钮或“方形”按钮来完成,
或单击窗格上的形状。
如何使形状“选定”?
在 JavaFX 中是否有一些简单的方法可以做到这一点?
解决方案
推荐阅读
- ajax - 如何在 Spring MVC 中返回一个空的 JSON?
- ruby-on-rails - 无法在 Rails 6 usgin ActiveStorage 中将头像附加到模型
- spring - http.authorizeRequests().antMatchers("/").permitAll() 不起作用
- html - 将内联块 DIV 定位在 DIV 容器内(没有 flexbox)
- javascript - React 如何设置组件 id 以便能够使用 document.getElementById()
- javascript - 如何通过 on change 事件引用和更改单行 TD 元素
- react-native - Jest with Enzyme - 连接组件的快照看起来与我的代码不同
- python - Python - Pandas - 导入 Excel 文件,遍历每一行,添加新值,并添加到数据框
- c++ - 关于时间打印的程序
- jquery - Ajax 不会添加 div