2015-07-04 246 views
0

我的應用程序的通常情況是這樣的:我有一個既擁有自定義對象又擁有創建ObservableList(和相應TableView)的方法的類,以便可以在其他類。這工作得很好: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(); 
} 
+2

請編輯以包含顯示空表的MCVE。 –

+0

@James_D我添加了代碼 –

+0

您給我們的代碼不可執行。一個MCVE應該是可執行的。 –

回答

0

似乎有一個與加載對象的問題:對象只可以如果先前保存的對象與當前的對象具有完全相同的方法,例如:如果我用foo()bar()保存對象,然後刪除bar(),我將無法加載該對象。以同樣的方式,如果我添加另一種方法(問題的問題),我再次將無法加載該對象。

我沒有在例外情況發生時打印出來,所以這可能是我爲什麼不知道問題在哪裏。故事的重點,總是打印你的例外。

相關問題