向 class 添加方法时 TableView 内容消失
TableView content disappearing when adding method to a class
我的应用程序的通常行为是这样的:我有一个 class,它既包含自定义对象,也包含创建 ObservableList(和相应的 TableView)的方法,因此它们可以在其他 class是的。这很好用:
但是当我向那个 class 添加一个方法时,那个 是空的 ,并且 甚至没有被使用 , 例如
public static void foo(){
}
..TableView 变成这样:
起初我以为它会以某种方式干扰仅用于保存对象的 class,但后来我意识到我之前添加了其他不相关的方法,但它并没有影响行为。那么这里到底发生了什么?
这是 myobject class(注意 TableView 方法):
public class Proizvod implements Serializable {
String name;
String jedinicamere;
Double cena;
static ObservableList<Proizvod> proizvods;
static TableView izmenaProizvodaTable;
public Proizvod() {
name = "";
cena = 0.0;
}
public Proizvod(String name, double cena, String jedinicamere) {
this.name = name;
this.cena = cena;
this.jedinicamere = jedinicamere;
}
public Double getCena() {
return cena;
}
public void setCena(Double cena) {
this.cena = cena;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJedinicamere() {
return jedinicamere;
}
public void setJedinicamere(String jedinicamere) {
this.jedinicamere = jedinicamere;
}
public static TableView getTable() {
proizvods = InputOutput.loadProizvods("proizvods.sav");
izmenaProizvodaTable = new TableView(proizvods);
TableColumn<Proizvod, String> nameColumn = new TableColumn<>("Ime");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
TableColumn<Proizvod, String> cenaColumn = new TableColumn<>("Cena");
cenaColumn.setCellValueFactory(new PropertyValueFactory<>("cena"));
TableColumn<Proizvod, String> jedinicaColumn = new TableColumn<>("Jedinica mere");
jedinicaColumn.setCellValueFactory(new PropertyValueFactory<>("jedinicamere"));
izmenaProizvodaTable.getColumns().addAll(nameColumn, cenaColumn, jedinicaColumn);
return izmenaProizvodaTable;
}
public static void newProizvod(Proizvod proizvod) {
proizvods = InputOutput.loadProizvods("proizvods.sav");
proizvods.add(proizvod);
izmenaProizvodaTable.setItems(proizvods);
InputOutput.saveProizvods(proizvods, "proizvods.sav");
}
public static void deleteProizvod(){
ObservableList<Proizvod> productSelected, allProducts;
allProducts = izmenaProizvodaTable.getItems();
productSelected = izmenaProizvodaTable.getSelectionModel().getSelectedItems();
productSelected.forEach(allProducts::remove);
InputOutput.saveProizvods(proizvods, "proizvods.sav");
}
}
这是实现:
public static void unosProizvoda() {
TableView tableView = Proizvod.getTable();
TextField kolicina = new TextField();
kolicina.setPromptText("Količina");
Button dodajProizvod = new Button("Dodaj proizvod");
dodajProizvod.setOnAction(event -> {
Proizvod izabranProizvod = (Proizvod) tableView.getSelectionModel().getSelectedItem();
Main.addToOdredjeniProizvods(new OdredjeniProizvod(Integer.valueOf(kolicina.getText()), izabranProizvod));
Main.enableFinalizeButton();
});
HBox hBox = new HBox(10, kolicina, dodajProizvod);
hBox.setPadding(new Insets(10,10,10,10));
VBox vBox = new VBox(tableView, hBox);
Stage stage = new Stage();
stage.setScene(new Scene(vBox, 300, 400));
stage.setTitle("Unos proizvoda");
stage.initModality(Modality.APPLICATION_MODAL);
stage.initStyle(StageStyle.UTILITY);
stage.showAndWait();
}
似乎加载对象时出现问题:只有以前保存的对象具有与当前对象完全相同的方法,才能正确加载对象,例如如果我使用 foo()
和 bar()
保存对象,然后删除 bar()
,我将无法加载该对象。同理,如果我再添加一个方法(问题的issue),我又无法加载对象了。
我没有在异常发生时将异常打印出来,所以这可能就是我无法意识到问题出在哪里的原因。故事的重点,总是打印你的异常。
我的应用程序的通常行为是这样的:我有一个 class,它既包含自定义对象,也包含创建 ObservableList(和相应的 TableView)的方法,因此它们可以在其他 class是的。这很好用:
但是当我向那个 class 添加一个方法时,那个 是空的 ,并且 甚至没有被使用 , 例如
public static void foo(){
}
..TableView 变成这样:
起初我以为它会以某种方式干扰仅用于保存对象的 class,但后来我意识到我之前添加了其他不相关的方法,但它并没有影响行为。那么这里到底发生了什么?
这是 myobject class(注意 TableView 方法):
public class Proizvod implements Serializable {
String name;
String jedinicamere;
Double cena;
static ObservableList<Proizvod> proizvods;
static TableView izmenaProizvodaTable;
public Proizvod() {
name = "";
cena = 0.0;
}
public Proizvod(String name, double cena, String jedinicamere) {
this.name = name;
this.cena = cena;
this.jedinicamere = jedinicamere;
}
public Double getCena() {
return cena;
}
public void setCena(Double cena) {
this.cena = cena;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJedinicamere() {
return jedinicamere;
}
public void setJedinicamere(String jedinicamere) {
this.jedinicamere = jedinicamere;
}
public static TableView getTable() {
proizvods = InputOutput.loadProizvods("proizvods.sav");
izmenaProizvodaTable = new TableView(proizvods);
TableColumn<Proizvod, String> nameColumn = new TableColumn<>("Ime");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
TableColumn<Proizvod, String> cenaColumn = new TableColumn<>("Cena");
cenaColumn.setCellValueFactory(new PropertyValueFactory<>("cena"));
TableColumn<Proizvod, String> jedinicaColumn = new TableColumn<>("Jedinica mere");
jedinicaColumn.setCellValueFactory(new PropertyValueFactory<>("jedinicamere"));
izmenaProizvodaTable.getColumns().addAll(nameColumn, cenaColumn, jedinicaColumn);
return izmenaProizvodaTable;
}
public static void newProizvod(Proizvod proizvod) {
proizvods = InputOutput.loadProizvods("proizvods.sav");
proizvods.add(proizvod);
izmenaProizvodaTable.setItems(proizvods);
InputOutput.saveProizvods(proizvods, "proizvods.sav");
}
public static void deleteProizvod(){
ObservableList<Proizvod> productSelected, allProducts;
allProducts = izmenaProizvodaTable.getItems();
productSelected = izmenaProizvodaTable.getSelectionModel().getSelectedItems();
productSelected.forEach(allProducts::remove);
InputOutput.saveProizvods(proizvods, "proizvods.sav");
}
}
这是实现:
public static void unosProizvoda() {
TableView tableView = Proizvod.getTable();
TextField kolicina = new TextField();
kolicina.setPromptText("Količina");
Button dodajProizvod = new Button("Dodaj proizvod");
dodajProizvod.setOnAction(event -> {
Proizvod izabranProizvod = (Proizvod) tableView.getSelectionModel().getSelectedItem();
Main.addToOdredjeniProizvods(new OdredjeniProizvod(Integer.valueOf(kolicina.getText()), izabranProizvod));
Main.enableFinalizeButton();
});
HBox hBox = new HBox(10, kolicina, dodajProizvod);
hBox.setPadding(new Insets(10,10,10,10));
VBox vBox = new VBox(tableView, hBox);
Stage stage = new Stage();
stage.setScene(new Scene(vBox, 300, 400));
stage.setTitle("Unos proizvoda");
stage.initModality(Modality.APPLICATION_MODAL);
stage.initStyle(StageStyle.UTILITY);
stage.showAndWait();
}
似乎加载对象时出现问题:只有以前保存的对象具有与当前对象完全相同的方法,才能正确加载对象,例如如果我使用 foo()
和 bar()
保存对象,然后删除 bar()
,我将无法加载该对象。同理,如果我再添加一个方法(问题的issue),我又无法加载对象了。
我没有在异常发生时将异常打印出来,所以这可能就是我无法意识到问题出在哪里的原因。故事的重点,总是打印你的异常。