未创建 javafx 窗格

javafx pane not being created

我的 JavaFx 代码无法正常工作。我正在尝试创建填充有 1 或 0 的 10X10 文本矩阵,因此它看起来类似于填充有 1 和 0 的二维数组。当我将当前位于 MatrixPane class 中的代码放在 main 中时,它工作正常,但使用此代码它只是设置场景,但看起来没有添加或创建任何窗格。

如果有人能帮助我,我将不胜感激。

我意识到我导入了一些未使用的东西,我正在将它们用于程序的其他部分。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.layout.FlowPane;
import javafx.geometry.Point2D;
import javafx.scene.Node;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.scene.text.Text;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javafx.scene.shape.Arc;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.geometry.Pos;
import javafx.collections.ObservableList;

public class Button1 extends Application
{
    public void start(Stage primaryStage)
    {
        GridPane pane = new GridPane();
        MatrixPane Matrix = new MatrixPane();
        pane.getChildren().add(Matrix);

        Scene scene = new Scene(pane, 700, 500);
        primaryStage.setTitle("1 window "); // Set the stage title
        primaryStage.setScene(scene); // Place the scene in the stage
        primaryStage.show(); // Display the stage
    }

    public static void main(String[] args)
    {
        Application.launch(args);
    }

}


class MatrixPane extends Pane
{
    double HEIGHT = 500;
    double WIDTH = 200;
    private GridPane pane1 = new GridPane();

    public MatrixPane()
    {
    }

    public void fillmatrix()
    {
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                TextField text = new TextField(Integer.toString((int)(Math.random() * 2)));
                text.setMinWidth(WIDTH / 8.0);
                text.setMaxWidth(WIDTH / 10.0);
                text.setMinHeight(HEIGHT / 8.0);
                text.setMaxHeight(HEIGHT / 10.0);
                this.pane1.add(text, j, i);
            }
        }
    }
}

好吧,我检查了你的代码,你过度使用了 GridPane。首先你有一个名为 MatrixPane 的 class 继承了 Pane,而且这个 class 有一个 属性 GridPane。最后,您再次使用 GridPane 来添加 MatrixPane!

所以,我所做的是使用合成,但首先我改变了 start 方法

public void start(Stage primaryStage) {

  GridPane pane = new GridPane();
  MatrixPane Matrix = new MatrixPane();
  //pane.getChildren().add(Matrix);
  Matrix.fillmatrix();
  Scene scene = new Scene(Matrix.getPane1(), 700, 500);
  ...

所以这里场景要接收pane1的数据,这个属性有调用fillmatrix时存储的值。

然后我在MatrixPane中为属性pane1

添加getter方法
class MatrixPane {

  double HEIGHT = 500;
  double WIDTH = 200;
  private GridPane pane1 = new GridPane();

  public GridPane getPane1() {
    return pane1;
  }
  ...

Button1.start()

调用 fillMatrix(); 方法

在 MatrixPane 构造器中将 GridPane 添加到 MatrixPane

private GridPane pane1 = new GridPane();

public MatrixPane() {
    getChildren().add(pane1);
}

这会起作用。