未创建 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);
}
这会起作用。
我的 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
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);
}
这会起作用。