我的JavaFx代码无法正常运行。我正在尝试创建填充有1或0的10X10文本矩阵,因此它看起来类似于填充有1和0的2d数组。当我将当前在MatrixPane类中的代码放在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的类,该类继承了Pane,但是该类具有一个属性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;
  }
  ...

关于java - 未创建javafx Pane ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36369038/

10-12 04:43