2013-06-11 12 views
8

To od razu mnie zaskoczyło i nie mogę tego uchwycić. Używam Cell Value Factory do wypełnienia prostej tabeli z jedną kolumną i nie zapełnia się ona w tabeli.Javafx PropertyValueFactory niewypełnianie Tableview

Robi to i klikam wiersze, które są wypełnione, ale nie widzę w nich żadnych wartości - w tym przypadku wartości ciągu. [Właśnie zmieniłem to, aby było wyraźniejsze]

Mam inny projekt, pod którym działa w ramach tego samego modelu danych. Co ja robię źle?

Oto kod. Skomentowany kod na końcu wydaje się jednak działać. Sprawdziłem, czy występują zwykłe błędy - tworzenie nowej instancji kolumny lub nowej instancji tableview. Nic. Proszę pomóż!


// Prosty model danych Stock.java

public class Stock { 

    private SimpleStringProperty stockTicker; 

    public Stock(String stockTicker) { 
     this.stockTicker = new SimpleStringProperty(stockTicker); 
    } 

    public String getstockTicker() { 
     return stockTicker.get(); 
    } 

    public void setstockTicker(String stockticker) { 
     stockTicker.set(stockticker); 
    } 
} 

// klasa kontrolera MainGuiController.java

private ObservableList<Stock> data; 
    @FXML 
    private TableView<Stock> stockTableView;// = new TableView<>(data); 
    @FXML 
    private TableColumn<Stock, String> tickerCol; 


    private void setTickersToCol() { 
    try { 
     Statement stmt = conn.createStatement();//conn is defined and works 
     ResultSet rsltset = stmt.executeQuery("SELECT ticker FROM tickerlist order by ticker"); 
     data = FXCollections.observableArrayList(); 
     Stock stockInstance; 
     while (rsltset.next()) { 
      stockInstance = new Stock(rsltset.getString(1).toUpperCase()); 
      data.add(stockInstance); 
     } 
    } catch (SQLException ex) { 
     Logger.getLogger(WriteToFile.class.getName()).log(Level.SEVERE, null, ex); 
     System.out.println("Connection Failed! Check output console"); 
    } 

    tickerCol.setCellValueFactory(new PropertyValueFactory<Stock,String>("stockTicker")); 
    stockTableView.setItems(data); 
    } 

    /*THIS, ON THE OTHER HAND, WORKS*/ 
    /*Callback<CellDataFeatures<Stock, String>, ObservableValue<String>> cellDataFeat = 
      new Callback<CellDataFeatures<Stock, String>, ObservableValue<String>>() { 
     @Override 
     public ObservableValue<String> call(CellDataFeatures<Stock, String> p) { 
      return new SimpleStringProperty(p.getValue().getstockTicker()); 
     } 
    };*/ 

Odpowiedz

24

jak to naprawić

Sprawa twojego zdobycia ter i setter są błędne.

getstockTicker powinny być getStockTicker

setstockTicker powinny być setStockTicker

kilka podstawowych informacji

Twój PropertyValueFactory pozostaje taka sama z:

new PropertyValueFactory<Stock,String>("stockTicker") 

WIL konwencja nazewnictwa l wydają się bardziej oczywiste, gdy również dodać obiekt do klasy akcesor Zdjęcie:

public class Stock { 

    private SimpleStringProperty stockTicker; 

    public Stock(String stockTicker) { 
     this.stockTicker = new SimpleStringProperty(stockTicker); 
    } 

    public String getStockTicker() { 
     return stockTicker.get(); 
    } 

    public void setStockTicker(String stockticker) { 
     stockTicker.set(stockticker); 
    } 

    public StringProperty stockTickerProperty() { 
     return stockTicker; 
    } 
} 

PropertyValueFactory wykorzystuje odbicia na znalezienie odpowiednich akcesorów. Najpierw spróbuje użyć atrybutu stockTickerProperty, a jeśli nie jest obecny, powróci do modułów pobierających i ustawiających. Zaleca się udostępnienie właściwości, ponieważ wtedy automatycznie włączysz tablicę do obserwacji właściwości w modelu bazowym, dynamicznie aktualizując dane w miarę zmian modelu.

+1

Oto najbardziej GRACZAJĄCA CZĘŚĆ: CAŁA mojego kodu używa konwencji nazewnictwa metod takich jak ta. WSZYSTKO (no, z wyjątkiem tego jednego fragmentu) Spędziłem DAYS w tej sprawie ... MY FREAKIN BÓG !! DZIĘKUJEMY !!!! –

+0

@jewelsea dlaczego getter jest wywoływany dwa razy? i więcej niż obiekt osoby? – UnKnown

+0

Przepraszam Nieznany, nie rozumiem, o co pytasz. Możesz zadać nowe pytanie. – jewelsea

0

umieścić metodę Getter i Setter w tobie klasy danych dla wszystkich elementów.

+0

Czy możesz być trochę bardziej konkretny? Proszę udzielić odpowiedzi, które nie wymagają wyjaśnień od pytającego. Więcej informacji [How To Answer] (http://stackoverflow.com/help/how-to-answer). –