我的应用程序的常用行为是:我有一个既包含自定义对象的类,也包含创建ObservableList(和相应的TableView)的方法,因此可以在其他类中使用它们。这很好用:
但是,当我向该课程添加方法时,为空,甚至不使用,例如。
public static void foo(){
}
.. TableView变成了这个:
起初我认为它以某种方式干扰了仅用于保存对象的类,但后来我意识到我之前添加了其他不相关的方法,并且它并没有影响行为。那么到底发生了什么呢?
这是myobject类(注意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();
}
答案 0 :(得分:0)
加载对象似乎存在问题:如果先前保存的对象具有与当前保存对象完全相同的方法,则只能正确加载对象,例如,如果我使用foo()
和bar()
保存对象,然后删除bar()
,我将无法加载该对象。以同样的方式,如果我添加另一种方法(问题的问题),我再次无法加载该对象。
我没有将Exceptions打印出来,所以这可能就是为什么我无法意识到问题出在哪里。故事的重点,始终打印您的例外。