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.