Javafx PropertyValueFactory не заполняет Tableview
Это немного озадачило меня, и я не могу понять его. Я использую Cell Value Factory для заполнения простой таблицы столбцов, и она не заполняется в таблице.
Он делает, и я щелкаю по заполняемым строкам, но я не вижу в них значений – в этом случае значения String. [Я только что отредактировал это, чтобы яснее]
У меня есть другой проект, в рамках которого он работает под такой же моделью данных. Что я делаю не так?
- JavaFX - фоновый stream для SQL-запроса
- javafx, обновить ui из другого streamа
- Как подключить источник или JavaDoc в eclipse для любого файла jar, например JavaFX?
- Значения наведения JavaFX LineChart
- JavaFX: Как подключить два узла по одной линии?
Вот код. Прокомментированный код в конце, похоже, работает. Я проверил, есть ли обычные ошибки – создание нового экземпляра столбца или нового экземпляра tableview. Ничего. Пожалуйста помоги!
// Простая модель данных 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); } }
// Класс controllerа MainGuiController.java
private ObservableList data; @FXML private TableView stockTableView;// = new TableView(data); @FXML private TableColumn 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("stockTicker")); stockTableView.setItems(data); } /*THIS, ON THE OTHER HAND, WORKS*/ /*Callback<CellDataFeatures, ObservableValue> cellDataFeat = new Callback<CellDataFeatures, ObservableValue>() { @Override public ObservableValue call(CellDataFeatures p) { return new SimpleStringProperty(p.getValue().getstockTicker()); } };*/
- Как выполнить задачу на javaFX TextField при onfocus и outfocus?
- Как передать объект, созданный в controllerе FXML1, в Controller2 внутреннего управления FXML
- JavaFX: Как изменить политику обхода фокуса?
- Как написать текст по кривой Безье?
- Как преобразовать обычный Java-проект в intellij в проект JavaFx
- Пара значений ключа для комбинированного поля в JavaFX 2
- Как создать модальное окно в JavaFX 2.1
- JavaFX2: Могу ли я приостановить фоновое задание / службу?
Как исправить
Случай с вашими методами getter и setter неверен.
getstockTicker
должен быть getStockTicker
setstockTicker
должен быть setStockTicker
Некоторая справочная информация
Свойство PropertyValueFactory остается неизменным:
new PropertyValueFactory("stockTicker")
Соглашение об именах будет казаться более очевидным, если вы также добавите аксессуар свойств в свой class 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; } }
PropertyValueFactory использует рефлексию для поиска соответствующих аксессуаров. Сначала он попытается использовать accessTickerProperty аксессуар, и, если нет, то отпадает назад к геттерам и сеттерам. Рекомендуется предоставить аксессуар свойств, так как вы автоматически включите свою таблицу для наблюдения за свойством в базовой модели, динамически обновляя ее в качестве базовых изменений модели.
поместите метод Getter и Setter в ваш class данных для всех элементов.