javaFX中表示矩阵的可能结构是什么

javaFX中表示矩阵的可能结构是什么,java,javafx,Java,Javafx,我有一个应用程序来开发它,最后一个涉及到矩阵的操作。 我在javaFX中找不到表示矩阵的结构, 我曾尝试使用文本区域,但这是不可能的? 如果您能帮助我,我正在等您。您可以使用网格窗格来实现此目的: public final class Matrix { private GridPane matrix; private final RowConstraints rConstraints; private final ColumnConstraints cConstrain

我有一个应用程序来开发它,最后一个涉及到矩阵的操作。 我在javaFX中找不到表示矩阵的结构, 我曾尝试使用
文本区域
,但这是不可能的?
如果您能帮助我,我正在等您。

您可以使用
网格窗格来实现此目的:

public final class Matrix {

    private GridPane matrix;
    private final RowConstraints rConstraints;
    private final ColumnConstraints cConstraints;
    private final Node closingBracketNode;
    private final Node openingBracketNode;

    private static <T> void fill(List<T> list, T element, int count, int startIndex) {
        list.subList(startIndex, list.size()).clear();
        for (int i = 0; i < count; i++) {
            list.add(element);
        }
    }

    public Matrix() {
        this(20, 10, 5, 5, "(", ")");
    }

    public Matrix(double minColumnWidth, double minRowHeight, double hgap, double vgap, String openingBracket, String closingBracket) {
        this.rConstraints = new RowConstraints();
        rConstraints.setMinHeight(minRowHeight);
        rConstraints.setValignment(VPos.CENTER);
        rConstraints.setVgrow(Priority.ALWAYS);
        this.cConstraints = new ColumnConstraints();
        cConstraints.setMinWidth(minColumnWidth);
        cConstraints.setHalignment(HPos.RIGHT);

        Text openingBracketNode = new Text(openingBracket);
        openingBracketNode.setBoundsType(TextBoundsType.VISUAL);
        this.openingBracketNode = new Group(openingBracketNode);
        Text closingBracketNode = new Text(closingBracket);
        closingBracketNode.setBoundsType(TextBoundsType.VISUAL);
        this.closingBracketNode = new Group(closingBracketNode);
        this.matrix = new GridPane();
        matrix.setHgap(hgap);
        matrix.setVgap(vgap);

        matrix.getColumnConstraints().add(new ColumnConstraints());

        matrix.addRow(0, this.openingBracketNode, this.closingBracketNode);

        DoubleBinding scale = Bindings.divide(matrix.heightProperty(),
                Math.max(
                        openingBracketNode.getLayoutBounds().getHeight(),
                        closingBracketNode.getLayoutBounds().getHeight()));

        openingBracketNode.scaleXProperty().bind(scale);
        openingBracketNode.scaleYProperty().bind(scale);
        closingBracketNode.scaleXProperty().bind(scale);
        closingBracketNode.scaleYProperty().bind(scale);
    }

    public GridPane getNode() {
        return matrix;
    }

    private Node createElementNode(Object object) {
        return new Text(object.toString());
    }

    public <T> void setContent(int rowCount, int columnCount, T[]... rows) {
        // prepare constraints
        fill(matrix.getColumnConstraints(), cConstraints, columnCount, 1);
        fill(matrix.getRowConstraints(), rConstraints, rowCount, 0);

        // clear old
        List<Node> children = matrix.getChildren();
        children.subList(2, children.size()).clear();

        GridPane.setColumnIndex(closingBracketNode, columnCount + 1);
        GridPane.setRowSpan(openingBracketNode, rowCount);
        GridPane.setRowSpan(closingBracketNode, rowCount);

        // add new
        for (int r = 0, maxR = Math.min(rows.length, rowCount); r < maxR; r++) {
            T[] row = rows[r];
            for (int c = 0, maxC = Math.min(columnCount, row.length); c < maxC; c++) {
                Object element = row[c];

                if (element != null) {
                    matrix.add(createElementNode(element), c + 1, r);
                }
            }
        }

    }

}
结果:


您应该显示您的TextArea代码并请求帮助。类似地,它使用TextArea输入矩阵并在网格窗格中显示。
@Override
public void start(Stage primaryStage) {
    Matrix matrix = new Matrix();

    matrix.setContent(2, 2, new Integer[]{1, 2}, new Integer[]{3, 4});

    Scene scene = new Scene(new StackPane(new Group(matrix.getNode())));

    primaryStage.setScene(scene);
    primaryStage.show();
}