如果我有一个包含两列的TableView,分开(不是嵌套),那么当我尝试重新排列它们时一切正常。但是,即使存在一个嵌套列,当我尝试重新排列某些内容时它也会崩溃。
这是我的xml:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="application.RecordsCtrl">
<!-- TODO Add Nodes -->
<children>
<VBox id="VBox" alignment="CENTER" spacing="0.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<TableView fx:id="table" editable="true" prefHeight="-1.0" prefWidth="-1.0">
<columns>
<TableColumn prefWidth="75.0" text="Column X">
<columns>
<TableColumn prefWidth="75.0" text="Name" fx:id="nameCol" />
<TableColumn prefWidth="75.0" text="Age" fx:id="ageCol" />
</columns>
</TableColumn>
</columns>
</TableView>
<Button mnemonicParsing="false" onAction="#editPerson" text="Edit" />
</children>
</VBox>
</children>
</AnchorPane>
以下是我在控制器类中使用的设置tableview的内容:
@Override
public void initialize(URL location, ResourceBundle resources) {
obsList = FXCollections.observableArrayList();
table.setItems(obsList);
obsList.add(new Person("Riley", 40));
obsList.add(new Person("Alex", 20));
obsList.add(new Person("Jack", 30));
nameCol.setCellValueFactory(new PropertyValueFactory<Person, String>(
"name"));
ageCol.setCellValueFactory(new PropertyValueFactory<Person, Integer>(
"age"));
nameCol.setCellFactory(TextFieldTableCell.<Person>forTableColumn());
nameCol
.setOnEditCommit(new EventHandler<CellEditEvent<Person, String>>() {
@Override
public void handle(CellEditEvent<Person, String> t) {
((Person) t.getTableView().getItems()
.get(t.getTablePosition().getRow())).setName(t
.getNewValue());
}
});
}
有谁知道如何解决这个问题?重新排列列是必须的,我需要克服这个障碍。任何帮助将不胜感激!