尝试启动Table填充时,我遇到Null指针问题。
我有一个名为Komponenta
的类中的对象,我将这些数据放入ObservableList
,然后尝试在TableView
中显示它。我已经尝试过这个时间来处理多个fxml屏幕,并且出于某种原因,它不适用于超过1 .fxml
。 test
是在main.fxml
上按下按钮时调用的方法,因此它会加载一个新方法。
MainController.java
public ObservableList<Komponenta> komponente = FXCollections.observableArrayList(new Komponenta("Neki Tip", "Neki Proizvodac","Neki opis", 5));
@FXML
private TableView<Komponenta> Tablica;
@FXML
private TableColumn<Komponenta,String> Tip;
@FXML
private TableColumn<Komponenta,String> Proizvodac;
@FXML
private TableColumn<Komponenta,String> Karakteristika;
@FXML
private TableColumn<Komponenta,Integer> Komada;
@FXML
private void test(ActionEvent event) throws IOException{
Node node=(Node) event.getSource();
Stage stage = (Stage) node.getScene().getWindow();
Parent root = (Pane)FXMLLoader.load(getClass().getResource("ElKomponenta.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
@FXML
private void initialize() throws Exception {
System.out.println(komponente.get(0).getKomada());
Tip.setCellValueFactory(new PropertyValueFactory<Komponenta, String>("tip"));
Proizvodac.setCellValueFactory(new PropertyValueFactory<Komponenta, String>("proizvodac"));
Karakteristika.setCellValueFactory(new PropertyValueFactory<Komponenta, String>("karakteristika"));
Komada.setCellValueFactory(new PropertyValueFactory<Komponenta, Integer>("komada"));
Tablica.setItems(komponente);
}
ElKomponenta.fxml
<TableView fx:id="Tablica" prefHeight="603.0" prefWidth="889.0">
<columns>
<TableColumn fx:id="Tip" prefWidth="177.0" text="Tip" />
<TableColumn fx:id="Proizvodac" minWidth="0.0" prefWidth="207.0" text="Proizvođač" />
<TableColumn fx:id="Karakteristika" prefWidth="326.0" text="Karakteristike" />
<TableColumn fx:id="Komada" minWidth="0.0" prefWidth="178.0" text="Komada" />
</columns>
</TableView>
错误:
Caused by: java.lang.NullPointerException
at application.MainController.initialize(MainController.java:62)
... 27 more
首先开始setCellValueFactory
的行。
如果需要,还可以使用Komponenta.java
public class Komponenta {
private String proizvodac;
private String tip;
private String karakteristika;
private Integer komada;
public Komponenta(String a, String b, String c, Integer d){
this.tip = a;
this.proizvodac = b;
this.karakteristika = c;
this.komada = d;
}
public String getProizvodac() {
return proizvodac;
}
public void setProizvodac(String proizvodac) {
this.proizvodac = proizvodac;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
public String getKarakteristika() {
return karakteristika;
}
public void setKarakteristika(String karakteristika) {
this.karakteristika = karakteristika;
}
public Integer getKomada() {
return komada;
}
public void setKomada(Integer komada) {
this.komada = komada;
}
}
答案 0 :(得分:1)
main.fxml
似乎不包含TableColumn
fx:id
Tip
,但似乎使用相同的控制器类。由于initialize
在使用控制器实例的FXMLLoader.load
方法的每次调用结束时调用,因此加载main.fxml
会导致NullPointerException
为fxml
使用不同的控制器类:main.fxml
的控制器类应包含按钮操作处理程序,而ElKomponenta.fxml
的控制器类应包含TableView
相关内容