Ich habe ein Fenster in fxml mit einem TableView und ein paar TableColumns und anderen Sachen geschrieben. Ich versuche, eine Funktion in der Steuerung zu diesem Fenster zu erstellen, die es dem Benutzer ermöglicht, auszuwählen, welche Spalten über eine Reihe von Kontrollkästchen in einem separaten Fenster angezeigt werden sollen. Dieses Fenster wäre ein untergeordnetes Fenster des HealthCheckTab. Es hätte eine Taste, die einmal gedrückt wurde, um den Status aller Checkboxen zu erhalten und eine Funktion in HealtkcheckTab aufzurufen, die die Tabellenansicht aktualisiert und die unerwünschten Spalten nicht sichtbar macht. Verstecke TableColumns von TableView durch CheckBox in einem separaten Fenster
Dies ist das Fenster mit dem Tableview (Auszug)
</TitledPane>
<TitledPane fx:id="classificationNumbers" animated="false"
text="HealthCheck Classification Numbers">
<content>
<ScrollPane fitToHeight="true" fitToWidth="true"
hbarPolicy="ALWAYS" maxHeight="1.7976931348623157E308"
maxWidth="1.7976931348623157E308" pannable="true">
<content>
<TableView fx:id="HcTable" editable="true"
maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
minWidth="-Infinity" tableMenuButtonVisible="true">
<columns>
<TableColumn fx:id="colId" editable="false"
maxWidth="-Infinity" minWidth="40.0" prefWidth="-1.0" text="ID" />
<TableColumn fx:id="colName" editable="false"
maxWidth="1.7976931348623157E308" minWidth="60.0"
prefWidth="-1.0" text="Name" />
<TableColumn fx:id="colVal" maxWidth="1.7976931348623157E308"
minWidth="55.0" prefWidth="-1.0" text="Value" />
<TableColumn fx:id="colDescrCn" editable="false"
maxWidth="1.7976931348623157E308" minWidth="90.0"
prefWidth="-1.0" text="Comment (CN)" />
<TableColumn fx:id="colDatatype" editable="false"
maxWidth="1.7976931348623157E308" minWidth="80.0"
prefWidth="-1.0" text="Datatype" />
<TableColumn fx:id="colTool" maxWidth="1.7976931348623157E308"
minWidth="50.0" prefWidth="-1.0" text="Tool" visible="false" />
<TableColumn fx:id="colPrio" editable="false"
maxWidth="1.7976931348623157E308" minWidth="60.0"
prefWidth="-1.0" text="Priority" />
<TableColumn fx:id="colScope" maxWidth="1.7976931348623157E308"
minWidth="50.0" prefWidth="-1.0" text="Scope" visible="false" />
<TableColumn fx:id="colAvg" editable="false"
maxWidth="1.7976931348623157E308" minWidth="50.0"
prefWidth="-1.0" text="AVG" visible="false" />
<TableColumn fx:id="colMin" maxWidth="1.7976931348623157E308"
minWidth="50.0" prefWidth="-1.0" text="MIN" visible="false" />
<TableColumn fx:id="colRelComp" prefWidth="122.0"
text="Relative Comparable" />
</columns>
</TableView>
</content>
</ScrollPane>
</content>
</TitledPane>
Dies ist das Steuergerät (Extrakt)
@FXML
private TreeView<String> HCTree;
@FXML
private TableView<Map> HcTable;
@FXML
private TableColumn<Map, String> colId;
@FXML
private TableColumn<Map, String> colName;
@FXML
private TableColumn<Map, String> colVal;
@FXML
private TableColumn<Map, String> colDescrCn;
@FXML
private TableColumn<Map, String> colDatatype;
@FXML
private TableColumn<Map, String> colTool;
@FXML
private TableColumn<Map, String> colPrio;
@FXML
private TableColumn<Map, String> colScope;
@FXML
private TableColumn<Map, String> colAvg;
@FXML
private TableColumn<Map, String> colMin;
@FXML
private TableColumn<Map, String> colRelComp;
// -----------------------------------------------------------------------------------------------
// REFRESH TABLE
// -----------------------------------------------------------------------------------------------
public void refreshTable() {
System.out.println("apply");
colScope.setVisible(true);
//colId.setVisible(false);
}
separates Fenster (Auszug)
@FXML
private void handleApplyViewOptions() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("HealthCheckTab.fxml"));
Stage stage = new Stage(StageStyle.DECORATED);
stage.setScene(new Scene(loader.load()));
HealthCheckTabController controller = loader.<HealthCheckTabController> getController();
controller.refreshTable();
} catch (IOException e) {
java.lang.System.err.println(e.getStackTrace());
}
Stage stage = (Stage) btnApply.getScene().getWindow();
stage.close();
}
Die Refreshfunktion Versteckt die Scope-Spalte überhaupt nicht. Ich weiß nicht, warum ...
1. Die "scope" -Spalte scheint den Index 7 zu haben, nicht 8. (Warum rufen Sie nicht einfach 'colScope.setVisible (...)' auf?) 2. Sie erwarten das Aufrufen von 'setVisible (true)' wird etwas verstecken? 3. Wo rufst du 'refreshTable()'? Ich empfehle Ihnen, ein [MCVE] zu erstellen, das das Problem veranschaulicht, und dieses zu veröffentlichen, anstatt einen unvollständigen Teil Ihres Projekts (der viel Code enthält, der für das Problem nicht relevant ist) zu veröffentlichen. –
ja ich habe erwartet, dass setVisible (true) etwas ändert, was vermisse ich/mache ich falsch?Ich habe die unnötigen Teile weggelassen und die Zeilen hinzugefügt, wo die Aktualisierung aufgerufen wird ... –
Sicher, wenn du etwas * verstecken * willst, würdest du 'setVisible (false)' ???? –