我尝试使用从Rectangle继承的一些正方形填充FlowPane。当我运行下面的代码时,窗口是空白的。 FlowPane没有显示我尝试添加的任何Squares。谁能帮我理解为什么?
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.input.MouseButton;
import javafx.scene.layout.FlowPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
public class NonoView extends Application{
private Square[] sqs;
@Override
public void start(Stage primaryStage) {
sqs = new Square[5];
for(int i = 0; i < sqs.length; i++){
sqs[i] = new Square();
}
FlowPane root = new FlowPane();
root.getChildren().addAll(sqs);
Scene scene = new Scene (root, 200, 200);
primaryStage.setScene(scene);
primaryStage.show();
}
class Square extends Rectangle{
Square(){
Rectangle sq = new Rectangle(100, 100);
sq.setFill(Color.WHITE);
sq.setStroke(Color.BLACK);
sq.setOnMouseClicked(e -> {
System.out.println(e.getButton().getClass());
if(e.getButton().equals(MouseButton.PRIMARY)){
if(sq.getFill() == Color.WHITE){
sq.setFill(Color.BLUE);
}else {
sq.setFill(Color.WHITE);
}
}
});
}
}
public static void main(String[] args){
Application.launch(args);
}
答案 0 :(得分:3)
您的Square
类并没有真正扩展Rectangle
,因为您打算:在构造函数中创建一个不属于外部作用域的矩形实例,它只存在于构造函数中
像这样重写构造函数,你应该没问题:
class Square extends Rectangle{
Square(){
super(100, 100);
setFill(Color.WHITE);
setStroke(Color.BLACK);
setOnMouseClicked(e -> {
System.out.println(e.getButton().getClass());
if(e.getButton().equals(MouseButton.PRIMARY)){
if(getFill() == Color.WHITE){
setFill(Color.BLUE);
}else {
setFill(Color.WHITE);
}
}
});
}
}