У меня есть GridPane
, заполненный ToggleButtons
. Первая строка и столбец в этом GridPane
содержит Text
меток объектов.
Я не могу центрировать Text
объектов с помощью ToggleButton
, поэтому текст появляется посередине, используя css.
( Этот ответ показывает, как этого добиться с помощью GridPane.setHalignment(node, HPos.CENTER);
).
MCVE при необходимости:
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class GridTest extends Application {
private static final int COLS = 5, ROWS = 3;
@Override public void start(Stage stage) {
Scene scene = new Scene(makeGrid());
scene.getStylesheets().add(getClass().
getResource("GridTest.css").toExternalForm());
stage.setScene(scene);
stage.show();
}
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 Text(txt);
}else if (colIndex == 0){//row header
node = new Text(String.valueOf(rowIndex));
}else {
node= new ToggleButton();
}
nodes[colIndex]= node;
}
grid.addRow(rowIndex, nodes);
}
return grid;
}
public static void main(String[] args) {
Application.launch(args);
}
}
CSS:
Text{
-fx-text-alignment: center;
}
GridPane {
-fx-hpos:center ;
-fx-hgap: 5;
-fx-vgap: 5;
-fx-padding:10;
}
ToggleButton {
-fx-pref-width:30;
}
alignment
(неtextAlignment
) по центру в CSS, но вам все равно нужно настроить панель сетки в Java, чтобы позволить метке увеличиваться, чтобы заполнить ячейку панели сетки. Как правило, вы должны использовать JavaFX CSS для управления стилем, а не макетом (хотя граница между ними иногда размыта). - person James_D   schedule 22.05.2018Text
в столбцахGridpane
(не центрировать текст в элементе управленияText
). Я могу легко продемонстрировать решение, используяGridPane.setHalignment(node, HPos.CENTER)
. Я ищу решение CSS. - person c0der   schedule 22.05.2018-fx-hpos:center ;
не для этого? - person c0der   schedule 22.05.2018-fx-alignment
(который устанавливает как горизонтальное, так и вертикальное выравнивание) и делает то, что я описал (устанавливает выравнивание всего содержимого панели, а не выравнивание в каждой ячейке панели сетки). - person James_D   schedule 22.05.2018Text
узлы не изменяют размер. Вы также не можете установить свойстваstatic
через css. Это означает, что ваш единственный вариант только с css — выравнивание по центру каждого дочернего элемента с использованиемfx-alignment: center;
наGridPane
. Кроме этого вы ничего не можете сделать, если только вы не замените узлыText
наLabel
s и не увеличите максимальный размер до достаточно больших значений, а затем не отцентрируете текстLabel
... - person fabian   schedule 22.05.2018GridPane.setFillWidth(label, true)
(я не верю, что это значение по умолчанию), и, как уже было сказано, нет способа установить статическое свойство в CSS. - person James_D   schedule 23.05.2018