JavaFX TableColumn.setCellValueFactory() 抛出空指针
JavaFX TableColumn.setCellValueFactory() throws null pointer
我在初始化其中一个表时遇到问题。
我先启动我的程序,然后想加载数据。
我得到以下设置:
Main.java:初始化程序并加载所有控制器,这工作正常。
它还具有加载数据的功能,如果这样做的话,它被存储在一个列表中。
TableViewController.java
控制我程序的一个选项卡,其中包含 TableView
.
setMain
在程序启动时在我的 Main.java 中被调用。
@FXML
private TableView<MyObject> tableView;
@FXML
private TableColumn<MyObject, String> columnOne;
@FXML
private TableColumn<MyObject, Integer> columnTwo;
@FXML
private TableColumn<MyObject, String> columnThree;
public void setMain(Main main) {
this.main = main;
tableView.setItems(main.getMyObjectObservableList());
}
public void updateContents() {
columnOne.setCellValueFactory(value->value.getValue().getType());
columnTwo.setCellValueFactory(value->value.getValue().getTotal().asObject());
columnThree.setCellValueFactory(value->value.getValue().getTrend());
}
我正在
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
Caused by: java.lang.NullPointerException
在columnOne.SetCellValueFactory;
行
我使用了 Eclipse 调试器并在 updateContents
处设置了一个断点,我的 TableView
对象充满了数据,正在加载。
为什么抛出异常?
编辑 1:
FXML:
<TableView fx:id="tableView">
<columns>
<TableColumn fx:id="columnOne" prefWidth="411.0" text="title" />
<TableColumn fx:id="columnTwo" maxWidth="335.0" minWidth="-1.0" prefWidth="188.0" />
<TableColumn fx:id="columnThree" maxWidth="335.0" minWidth="-1.0" prefWidth="188.0" />
</columns>
</TableView>
正在加载 FXML:
public void initTable() {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/Table.fxml"));
AnchorPane table = (AnchorPane) loader.load();
Tab t = new Tab();
t.setText("Table");
t.setContent(table);
mainTabPane.getTabs().add(t);
tableViewController = loader.getController();
tableViewController.setMain(this);
} catch (IOException e) {
e.printStackTrace();
}
}
更新内容:
public void loadData(File[] files) throws IOException {
//loading data here
myObjectObservableList.add( new MyObject(params));
TableViewController.updateContents();
}
fabian 在对问题本身的评论之一中回答了这个问题。
谢谢!
我在初始化其中一个表时遇到问题。 我先启动我的程序,然后想加载数据。
我得到以下设置:
Main.java:初始化程序并加载所有控制器,这工作正常。 它还具有加载数据的功能,如果这样做的话,它被存储在一个列表中。
TableViewController.java
控制我程序的一个选项卡,其中包含 TableView
.
setMain
在程序启动时在我的 Main.java 中被调用。
@FXML
private TableView<MyObject> tableView;
@FXML
private TableColumn<MyObject, String> columnOne;
@FXML
private TableColumn<MyObject, Integer> columnTwo;
@FXML
private TableColumn<MyObject, String> columnThree;
public void setMain(Main main) {
this.main = main;
tableView.setItems(main.getMyObjectObservableList());
}
public void updateContents() {
columnOne.setCellValueFactory(value->value.getValue().getType());
columnTwo.setCellValueFactory(value->value.getValue().getTotal().asObject());
columnThree.setCellValueFactory(value->value.getValue().getTrend());
}
我正在
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
Caused by: java.lang.NullPointerException
在columnOne.SetCellValueFactory;
行
我使用了 Eclipse 调试器并在 updateContents
处设置了一个断点,我的 TableView
对象充满了数据,正在加载。
为什么抛出异常?
编辑 1:
FXML:
<TableView fx:id="tableView">
<columns>
<TableColumn fx:id="columnOne" prefWidth="411.0" text="title" />
<TableColumn fx:id="columnTwo" maxWidth="335.0" minWidth="-1.0" prefWidth="188.0" />
<TableColumn fx:id="columnThree" maxWidth="335.0" minWidth="-1.0" prefWidth="188.0" />
</columns>
</TableView>
正在加载 FXML:
public void initTable() {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/Table.fxml"));
AnchorPane table = (AnchorPane) loader.load();
Tab t = new Tab();
t.setText("Table");
t.setContent(table);
mainTabPane.getTabs().add(t);
tableViewController = loader.getController();
tableViewController.setMain(this);
} catch (IOException e) {
e.printStackTrace();
}
}
更新内容:
public void loadData(File[] files) throws IOException {
//loading data here
myObjectObservableList.add( new MyObject(params));
TableViewController.updateContents();
}
fabian 在对问题本身的评论之一中回答了这个问题。
谢谢!