llenar data como cargar javafx-2 javafx tableview

javafx-2 - como - tableview javafx add data



Javafx PropertyValueFactory no ocupa TableView (2)

Esto me ha desconcertado por un tiempo y parece que no puedo entenderlo. Estoy usando Cell Value Factory para completar una tabla simple de una columna y no aparece en la tabla.

Lo hace y hago clic en las filas que se rellenan, pero no veo ningún valor en ellas, en este caso valores de cadena. [Acabo de editar esto para hacerlo más claro]

Tengo un proyecto diferente bajo el cual funciona bajo el mismo tipo de modelo de datos. ¿Qué estoy haciendo mal?

Aquí está el código. El código comentado al final parece funcionar bien. Revisé para ver si los errores habituales, crear una nueva instancia de columna o una nueva instancia de tabla, están ahí. Nada. ¡Por favor ayuda!

// Simple Data Model 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); } }

// Clase de controlador 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()); } };*/


Como arreglarlo

El caso de los métodos getter y setter es incorrecto.

getstockTicker debe ser getStockTicker

setstockTicker debe ser setStockTicker

Algunos antecedentes

Su PropertyValueFactory sigue siendo el mismo con:

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

La convención de nomenclatura parecerá más obvia cuando también agrega un acceso de propiedad a su clase Stock:

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; } }

La PropertyValueFactory utiliza la reflexión para encontrar los descriptores de acceso relevantes. Primero intentará usar el accesoador stockTickerProperty y, si eso no está presente, recurrirá a getters y setters. Se recomienda proporcionar un acceso a la propiedad, ya que automáticamente habilitará su tabla para observar la propiedad en el modelo subyacente, actualizando dinámicamente sus datos a medida que cambie el modelo subyacente.


pon el método Getter and Setter en tu clase de datos para todos los elementos.