Нет содержимого в табличном представлении javaFX - PullRequest
0 голосов
/ 30 сентября 2018

Итак, я проверил другое Нет содержимого в TableView , но это не помогло.

У меня есть база данных с именем Ledger, и я хочу, чтобы мои транзакции были видны.

void buildData(){

    final ObservableList<ObservableList<String>> data = null

    try{
        //ResultSet
        ResultSet rs = sql.getTransactions(account.getValue().toString())

        /**********************************
         * TABLE COLUMN ADDED DYNAMICALLY *
         **********************************/
        for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++){
            //We are using non property style for making dynamic table
            final int j = i
            TableColumn col = new TableColumn(rs.getMetaData().getColumnName(i+1))
            col.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){
                ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) {
                    return new SimpleStringProperty(param.getValue().get(j).toString())
                }
            })

            budgetTable.getColumns().addAll(col)
        }

        /********************************
         * Data added to ObservableList *
         ********************************/
        while(rs.next()){
            //Iterate Row

            ObservableList<String> row = FXCollections.observableArrayList()
            for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
                //Iterate Column
                row.add(rs.getString(i))
            }
            println("Row [1] added "+row )
            data?.add(row)
        }

        //FINALLY ADDED TO TableView
        budgetTable.setItems(data)
    }catch(Exception e){
        e.printStackTrace()
        System.out.println("Error on Building Data")
    }
}

У меня есть 5 столбцов в базе данных, которые возвращаются и добавляются в табличное представление.Это дата, from_account, to_account, сумма и примечания:

mysql> show columns from ledger;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | bigint(20)  | NO   | PRI | NULL    | auto_increment |
| version      | bigint(20)  | NO   |     | 1       |                |
| date         | datetime    | NO   |     | NULL    |                |
| notes        | varchar(35) | NO   |     | NULL    |                |
| amount       | double      | NO   |     | NULL    |                |
| from_account | varchar(19) | NO   |     | NULL    |                |
| to_account   | varchar(55) | YES  |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
7 rows in set (0.45 sec)

Я не получаю ошибки, иначе у меня был бы очень хороший шанс ее решить.На данный момент я не знаю, в чем проблема.Просто говорит "Нет содержимого в таблице" при сборке.Этот файл является отличным, поэтому он выглядит как синтаксис Python.

Заранее благодарим за помощь, время и идеи!Будь здоров!

1 Ответ

0 голосов
/ 30 сентября 2018

Я не очень знаком с Groovy, но я думаю, что знаю, в чем проблема.Во-первых, вы объявляете data как final, а затем присваиваете ему null.

final ObservableList<ObservableList<String>> data = null;

Это означает, что null наступит тогда, когда вы перейдете к настройке элементов TableView,По сути, вы звоните budgetTable.setItems(null).Обычно вы не достигнете этой точки, потому что вызов data.add(row) вызовет NullPointerException;за исключением того, что вы не используете data.add(row), а скорее data?.add(row).? здесь - оператор безопасной навигации .

Оператор безопасной навигации используется, чтобы избежать NullPointerException.Обычно, когда у вас есть ссылка на объект, вам может потребоваться проверить, что это не null, прежде чем обращаться к методам или свойствам объекта.Чтобы избежать этого, оператор безопасной навигации просто возвратит null вместо выдачи исключения ...

См. этот вопрос для получения дополнительной информации.

Учитываявсе это, просто изменив:

final ObservableList<ObservableList<String>> data = null;

To:

final ObservableList<ObservableList<String>> data = FXCollections.observableArrayList();

Должен решить вашу проблему.

...