将方法添加到类时,TableView内容消失

时间:2015-07-04 18:15:32

标签: java javafx javafx-8

我的应用程序的常用行为是:我有一个既包含自定义对象的类,也包含创建ObservableList(和相应的TableView)的方法,因此可以在其他类中使用它们。这很好用:

enter image description here

但是,当我向该课程添加方法时,为空甚至不使用,例如。

public static void foo(){
}

.. TableView变成了这个:

enter image description here

起初我认为它以某种方式干扰了仅用于保存对象的类,但后来我意识到我之前添加了其他不相关的方法,并且它并没有影响行为。那么到底发生了什么呢?

这是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();
}

1 个答案:

答案 0 :(得分:0)

加载对象似乎存在问题:如果先前保存的对象具有与当前保存对象完全相同的方法,则只能正确加载对象,例如,如果我使用foo()bar()保存对象,然后删除bar(),我将无法加载该对象。以同样的方式,如果我添加另一种方法(问题的问题),我再次无法加载该对象。

我没有将Exceptions打印出来,所以这可能就是为什么我无法意识到问题出在哪里。故事的重点,始终打印您的例外。