На основе комментариев, опубликованных @ James_D и @fabian, а также предыдущих ответов, существует два варианта центрирования текстовых меток.Один вариант, как указано в вопросе, не использует CSS.Требуется небольшая модификация makeGrid
:
//see: https://stackoverflow.com/a/35438985/3992939
GridPane.setHalignment(node, HPos.CENTER); //added line
nodes[colIndex]= node;
Это решение не меняет (не изменяемого размера) Text
.Он просто центрирует его в пределах GridPane
родительского столбца.
Другой вариант включает изменение меток Text
на Labels
:
private Pane makeGrid() {
GridPane grid = new GridPane();
for(int rowIndex = 0; rowIndex < ROWS ; rowIndex++) {
Node[] nodes = new Node[COLS];
Node node;
for(int colIndex = 0; colIndex < COLS ; colIndex++) {
if (rowIndex == 0){ //col header;
String txt = (colIndex == 0) ? " " : String.valueOf(colIndex);
node = new Label(txt); //** changed
}else if (colIndex == 0){//row header
node = new Label(String.valueOf(rowIndex)); //** changed
}else {
node= new ToggleButton();
}
nodes[colIndex]= node;
}
grid.addRow(rowIndex, nodes);
}
return grid;
}
и использование css (или дополнительного кода) для установки максимальной ширины метки и центрирования текста:
GridPane .label{
-fx-alignment: center;
-fx-max-width: Infinity;
}
GridPane {
-fx-hgap: 5;
-fx-vgap: 5;
-fx-padding:10;
}
ToggleButton {
-fx-pref-width:30;
}