为什么重新排列嵌套列会导致NPE?

时间:2014-05-09 06:20:46

标签: java javafx javafx-2 javafx-8 null-pointer

如果我有一个包含两列的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());
               }
            });
   }

有谁知道如何解决这个问题?重新排列列是必须的,我需要克服这个障碍。任何帮助将不胜感激!

0 个答案:

没有答案