2015-02-04 3 views
5

У меня проблема, которая заводила меня на орехи в течение нескольких дней.JavaFX Как изменить высоту строки GridPane программно

У меня есть GridPane, и я хочу скрыть первую строку, когда я нажимаю кнопку.
Это файл FXML

<VBox prefHeight="200.0" prefWidth="100.0"> 
 
<children> 
 
<Button fx:id="buttonTest" mnemonicParsing="false" onAction="#handleButtonTestAction" text="Button" /> 
 
<GridPane fx:id="gridPaneTest" gridLinesVisible="true" layoutX="0.5" layoutY="0.5" BorderPane.alignment="CENTER"> 
 
    <columnConstraints> 
 
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
 
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
 
    </columnConstraints> 
 
    <rowConstraints> 
 
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
 
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
 
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
 
    </rowConstraints> 
 
    <children> 
 
    <Label fx:id="labelTopLeft" text="top left"> 
 
    <font> 
 
    <Font size="15.0" /> 
 
    </font> 
 
    </Label> 
 
    <Label fx:id="labelTopRight" text="top right" GridPane.columnIndex="1"> 
 
    <font> 
 
    <Font size="15.0" /> 
 
    </font> 
 
    </Label> 
 
    <Label text="center left" GridPane.rowIndex="1"> 
 
    <font> 
 
    <Font size="15.0" /> 
 
    </font> 
 
    </Label> 
 
    <Label text="center right" GridPane.columnIndex="1" GridPane.rowIndex="1"> 
 
    <font> 
 
    <Font size="15.0" /> 
 
    </font> 
 
    </Label> 
 
    <Label text="bottom left" GridPane.rowIndex="2"> 
 
    <font> 
 
    <Font size="15.0" /> 
 
    </font> 
 
    </Label> 
 
    <Label text="bottom right" GridPane.columnIndex="1" GridPane.rowIndex="2"> 
 
    <font> 
 
    <Font size="15.0" /> 
 
    </font> 
 
    </Label> 
 
    </children> 
 
</GridPane> 
 
</children> 
 
</VBox>

Если я нажимаю на кнопку Я делаю это

@FXML 
public void handleButtonTestAction() { 

    labelTopLeft.setVisible(false); 
    labelTopRight.setVisible(false); 

    gridPaneTest.getRowConstraints().get(0).setMinHeight(0); 
    gridPaneTest.getRowConstraints().get(0).setPrefHeight(0); 
    gridPaneTest.getRowConstraints().get(0).setMaxHeight(0); 
} 

После нажатия кнопки, метки невидимы, как и ожидалось, но высота из первая строка не изменяется вообще. Должен ли я обновлять GridPane после изменения ограничений строки или есть что-то еще?

СПАСИБО!

+0

Вы хотите скрыть строку или удалить строку? – ItachiUchiha

+0

Я просто хочу скрыть строку. Он будет использоваться для функции фильтра из поиска. – stefOCDP

ответ

6

Node.setVisible() просто переключает видимость состояния Node.

Чтобы исключить Node из расчетов с макетами родителей, вы также должны установить его управляемое состояние, позвонив по номеру Node.setManaged(false).

+0

Большое спасибо, что отлично работает. Возможно ли сделать его видимым снова. Потому что только Node.setManaged (true) и Node.serVisible (true) не работают. – stefOCDP

+0

Да, 'setVisibible (true)' и 'setManaged (true)' должен заставить его снова появиться. – eckig

+0

Спасибо, что это сработало. У меня просто была ошибка ввода – stefOCDP

Смежные вопросы