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