У меня есть класс, который создает сетку из массива TextFields, используя GridPane. Мне нужно вставить эту сетку в ScrollPane, которая принимает Node только в методе setContent(). Поэтому я расширяю этот класс из GridPane. Экземпляр класса Grid создается и устанавливается в ScrollPane методом onMnuItemNewAction класса MainViewController.java, но сетка не отображается. Спасибо за помощь.
MainView.fxml
Main.java
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
public class Main extends Application {
@Override
public void start(Stage stage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(Main.class.getResource("MainView.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 800, 600);
stage.setTitle("Grid Demo");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
MainViewController.java (метод вызова)
import javafx.geometry.Pos;
import javafx.scene.control.MenuItem;
import javafx.scene.control.ScrollPane;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import java.net.URL;
import java.util.ResourceBundle;
public class MainViewController implements Initializable {
@FXML
private MenuItem mnuItemNew;
@FXML
private ScrollPane scpGrid;
@FXML
public void onMnuItemNewAction() {
int cols = 10;
int rows = 10;
int horizontalGap = 1;
int verticalGap = 1;
int fieldHorizontalSize = 40;
int fieldVerticalSize = 40;
var newGrid = new Grid(cols, rows, horizontalGap, verticalGap, fieldHorizontalSize, fieldVerticalSize);
scpGrid.setContent(newGrid);
newGrid.setAlignment(Pos.CENTER);
}
@Override
public void initialize(URL url, ResourceBundle rb) {
}
}
Grid.java
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import java.net.URL;
import java.util.ResourceBundle;
public class Grid extends GridPane implements Initializable {
private final int totalColumnFields;
private final int totalRowFields;
private final int horizontalGap;
private final int verticalGap;
private final int fieldHorizontalSize;
private final int fieldVerticalSize;
public Grid(int totalColumnFields, int totalRowFields, int horizontalGap, int verticalGap, int fieldHorizontalSize, int fieldVerticalSize) {
this.totalColumnFields = totalColumnFields;
this.totalRowFields = totalRowFields;
this.horizontalGap = horizontalGap;
this.verticalGap = verticalGap;
this.fieldHorizontalSize = fieldHorizontalSize;
this.fieldVerticalSize = fieldVerticalSize;
}
@Override
public void initialize(URL url, ResourceBundle rb) {
this.setHgap(horizontalGap);
this.setVgap(verticalGap);
TextField[][] arrayLetterField = new TextField[totalColumnFields][totalRowFields];
for (int row = 0; row < totalRowFields; row++) {
for (int col = 0; col < totalColumnFields; col++) {
arrayLetterField[col][row] = new TextField();
arrayLetterField[col][row].setMinSize(fieldHorizontalSize, fieldVerticalSize);
arrayLetterField[col][row].setMaxSize(fieldHorizontalSize, fieldVerticalSize );
this.add(arrayLetterField[col][row], col, row);
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... -scrolpane
JavaFX – вставка составного объекта (GridPane с TextFields) в ScrolPane ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение