Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Построение динамических таблиц FXML / 10 сообщений из 10, страница 1 из 1
17.10.2017, 11:21
    #39537356
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение динамических таблиц FXML
Здравствуйте, ув.знатоки.

пытаюсь написать приложение - ридер .mdb-файлов (старый MS Access).
Файл по содержанию разбит на своеобразные таблицы.
Таблицы я вывел деревом, теперь пытаюсь сделать так, чтобы при выборе одной из таблиц я смог построить таблицу на форме ( TableView ) и заполнить ее данными.
Прочитал много туториалов и примеров на stackoverflow - почти все примеры построены на том, что построение не динамическое.

Построил все так, как понял, у меня получается корректно заполнить только заголовки таблиц, и кусочек последней строки конечной таблицы.

фрагмент кода, в котором я создаю и заполняю таблицы:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
    @FXML
    private TableView<ObservableList<String>> tableRows;

    private ArrayList<TableColumn<ObservableList<String>, String>> headOfCurTable = new ArrayList<>();
    private List<String> bodyOfCurTable = new ArrayList<>();
    private ObservableList<String> rows = FXCollections.observableArrayList();

    public void loadCurrentTable(String selectedTable) throws IOException {

        tableRows.getColumns().clear();
        headOfCurTable.clear();
        bodyOfCurTable.clear();

        headOfCurTable = readerObj.getHeadTable(selectedTable); //массив, который хранит уже созданные колонки
        bodyOfCurTable = readerObj.getBodyTable(selectedTable); //массив данных, которыми заполняю таблицы

        for (int i = 0; i < headOfCurTable.size(); i++) {
            tableRows.getColumns().add(headOfCurTable.get(i));

        }
        tableRows.getItems().add( FXCollections.observableList(bodyOfCurTable));

        for (int j = 0; j < bodyOfCurTable.size(); j++) {
            final int finalIdx = j;
            if (j%headOfCurTable.size()==0){
                System.out.print("\n");
            }

            headOfCurTable.get(j%headOfCurTable.size()).setCellValueFactory(cellData -> //ошибка где-то тут. но в чем она не понимаю
                new ReadOnlyObjectWrapper<>(cellData.getValue().get(finalIdx))
            );
            System.out.print("\t" + bodyOfCurTable.get(j)); //вывожу данные в консоль, чтобы удостовериться, что я не верблюд
        }
    }


Если этого фрагмента кода недостаточно, уточните пожалуйста.
В комментариях в коде я указал где ошибка, по моему мнению, но я ее не вижу.

Буду очень признателен если попутно кто-нибудь доходчиво объяснит как работает класс ObservableList<>и зачем он нужен?
Пытался понять из документации, но честно говоря, там прям мрак для меня пока. А на русском языке доходчиво нигде не изложено.
Так же, может кто сможет подсказать какую-нибудь ресурс, для изучения работы FXML и JavaFX либы.
...
Рейтинг: 0 / 0
17.10.2017, 14:33
    #39537512
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение динамических таблиц FXML
wolfioкласс ObservableList<>и зачем он нужен?
Он для событий когда юзверь что поменял или в базе поменялось. Тебе не нужно.
Но все демки JavaFX идут с ним, поэтому так:
- RecordController.java
- там класс RecordController
- у него поле ObservableList....
- аннотации @FXML
...
Рейтинг: 0 / 0
17.10.2017, 14:40
    #39537516
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение динамических таблиц FXML
wolfio,
По ошибке, включай пошаговую отладку.
По динамическому sql - просто у тебя вьювер.
Это редко. Обычно модель статична и все таблы заранее.
...
Рейтинг: 0 / 0
17.10.2017, 14:45
    #39537525
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение динамических таблиц FXML
wolfio,
Литература - поиск гугле слов javaFX8, FXML.
Без FXML примеры не смотри.
...
Рейтинг: 0 / 0
17.10.2017, 14:54
    #39537537
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение динамических таблиц FXML
Petro123,
спасибо за отсылки на гугл, но думаю, что я там все перерыл.

Petro123 По динамическому sql - просто у тебя вьювер.
тут sql-то особо не причем. Динамическая именно таблица, т.е. количество колонок и данных в ней. Контрол на форме всего один. Не очень понял что я могу тут отладить пошагово.
...
Рейтинг: 0 / 0
17.10.2017, 15:47
    #39537583
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение динамических таблиц FXML
wolfioтам все перерыл.
Я же находил примеры. Но дело твоё.

wolfioтут sql-то особо не причем. Динамическая именно таблица,
И что?
MyTable.addColumn (....

wolfioНе очень понял что я могу тут отладить пошагово.
Ошибки все что есть и будут.
...
Рейтинг: 0 / 0
17.10.2017, 16:00
    #39537593
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение динамических таблиц FXML
Petro123MyTable.addColumn (....
Глянул, вроде нет в api такого
оторый будет отображаться так же, как вам нужно.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
List<String> columns = new ArrayList<String>();
    columns.add("col1");
    columns.add("col2");
    TableColumn [] tableColumns = new TableColumn[columns.size()];     
    int columnIndex = 0;
    for(int i=0 ; i<columns.size(); i++) {
        final int j = i;
        TableColumn col = new TableColumn(columns.get(i));
        col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){                   
           public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {                                                                                             
                return new SimpleStringProperty(param.getValue().get(j).toString());                       
            }                   
        });
        tableview.getColumns().addAll(col);
    }       
    ObservableList<String> row = FXCollections.observableArrayList();
    ObservableList<String> row1 = FXCollections.observableArrayList();
    row.addAll("d1");
    row.addAll("d11");
    row1.addAll("d2");
    row1.addAll("d22");
    tableview.getItems().add(row);
    tableview.getItems().add(row1);


?
...
Рейтинг: 0 / 0
17.10.2017, 16:07
    #39537597
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение динамических таблиц FXML
Petro123,

Petro123 Я же находил примеры. Но дело твоё.
да я не говорю, что примеров нет. Они есть, но я не понимаю некоторых из них. Вот на мой взгляд самый подходящий , но на его примере я так и не понял как мне данные в таблицу зафигачить.

Petro123 Глянул, вроде нет в api такого
оторый будет отображаться так же, как вам нужно.
У вас тут в примере, как я понимаю, динамическое заполнение только заголовков таблицы (т.е. колонок и имен). А строки статичны.
Это вроде как не то..
...
Рейтинг: 0 / 0
17.10.2017, 16:32
    #39537609
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение динамических таблиц FXML
wolfioА строки статичны.переведи.
Строки всегда Не статичны.
...
Рейтинг: 0 / 0
17.10.2017, 16:41
    #39537617
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение динамических таблиц FXML
wolfioкак я понимаю,
Ты пробуй.
1. Прочитал из базы в коллекцию.
2.построил колонки
3. Биндинг
4. OnShow на экран.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Построение динамических таблиц FXML / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]