2015-02-04 16 views
5

Ich habe ein Problem, das mich für ein paar Tage verrückt hat.JavaFX Wie ändere ich die GridPane Zeilenhöhe programmgesteuert

Ich habe ein GridPane und ich möchte die erste Zeile ausblenden, wenn ich auf eine Schaltfläche klicke.
Dies ist die FXML Datei

<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>

Wenn ich auf den Button klicke ich dieses tun

@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); 
} 

Nachdem ich auf die Schaltfläche klicken, die Etiketten sind unsichtbar wie erwartet, aber die Höhe der Die erste Zeile ändert sich überhaupt nicht. Muss ich das GridPane aktualisieren, nachdem ich die Zeilenbeschränkungen geändert habe oder gibt es sonst noch etwas zu tun?

DANKE!

+0

Möchten Sie die Zeile ausblenden oder die Zeile löschen? – ItachiUchiha

+0

Ich möchte nur die Reihe verstecken. Es wird für eine Filterfunktion von einer Suche verwendet werden – stefOCDP

Antwort

6

Node.setVisible() schaltet nur den Sichtbarkeitszustand eines Node um.

Um einen Node von seinen Eltern-Layout-Berechnungen ausschließen zu können, müssen Sie zusätzlich seinen verwalteten Zustand einstellen, indem Sie Node.setManaged(false) anrufen.

+0

Vielen Dank, das funktioniert gut. Ist es möglich, es wieder sichtbar zu machen? Weil nur Node.setManaged (true) und Node.serVisible (true) nicht funktioniert. – stefOCDP

+0

Ja, 'setVisibible (true)' und 'setManaged (true)' sollten es wieder erscheinen lassen. – eckig

+0

Danke, es hat funktioniert. Ich hatte gerade einen Tippfehler – stefOCDP

Verwandte Themen