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

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

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

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

wolfioНе очень понял что я могу тут отладить пошагово.
Ошибки все что есть и будут.
...
Рейтинг: 0 / 0
Построение динамических таблиц FXML
    #39537593
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Построение динамических таблиц FXML
    #39537597
wolfio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

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

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


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