我的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/