Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 22.03.2017
Сообщений: 11

Программное обновление текста в ячейке TableView

31.03.2017, 09:24. Показов 2602. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня.
Есть программа отображающая в TableView информацию. В процессе её работы информация меняется и возникает необходимость обновления текста в ячейках таблицы.
Для понимания приведу простой пример:



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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
 
public class Test extends Application {
 
    private TableView<Person> table = new TableView<Person>();
    private final ObservableList<Person> data =
            FXCollections.observableArrayList(
            new Person("Jacob"),
            new Person("Isabella"),
            new Person("Ethan"),
            new Person("Emma"),
            new Person("Michael"));
    final HBox hb = new HBox();
 
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group());
        stage.setTitle("Table View Sample");
        stage.setWidth(450);
        stage.setHeight(550);
 
        table.setEditable(true);
 
        TableColumn firstNameCol = new TableColumn("First Name");
        firstNameCol.setMinWidth(100);
        firstNameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("firstName"));
 
        table.setItems(data);
        table.getColumns().add(firstNameCol);
 
        final Button button1 = new Button("Edit1");
        button1.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent e) {
System.out.println(data.get(2).getFirstName());
data.get(2).setFirstName("abcdef");
System.out.println(data.get(2).getFirstName());
            }
        });
 
        final Button button2 = new Button("Edit2");
        button2.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent e) {
Person temp = data.get(2);
temp.setFirstName("ghijkl");
data.set(2,temp);
            }
        });
 
        hb.getChildren().addAll(button1, button2);
        hb.setSpacing(3);
 
        final VBox vbox = new VBox();
        vbox.setSpacing(5);
        vbox.setPadding(new Insets(10, 0, 0, 10));
        vbox.getChildren().addAll(table, hb);
 
        ((Group) scene.getRoot()).getChildren().addAll(vbox);
 
        stage.setScene(scene);
        stage.show();
    }
 
    public static class Person {
 
        private final SimpleStringProperty firstName;
 
        private Person(String fName) {
            this.firstName = new SimpleStringProperty(fName);
        }
 
        public String getFirstName() {
            return firstName.get();
        }
        public void setFirstName(String fName) {
            firstName.set(fName);
        }
    }
}
Если менять текст в объекте (как по нажатию кнопки button1) то значение поля в объекте меняется (это можно видеть по выводу в консоль "до" и "после") но TableView отображает старое значение (оно и понятно - ObservableList ничего не знает о том, что в полях объекта что-то изменилось). Для себя нашёл пока способ "обновления" информации - как по нажатию кнопки button2. Больше никаких идей в голову не пришло, пока не очень хорошо знаком с java. Подскажите, как сообщить ObservableList или TableView о том, что нужно "перерисовать" ячейку или строку?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.03.2017, 09:24
Ответы с готовыми решениями:

Обновление TableView
Добрый день, коллеги! Подскажите пожалуйста как организовать обновление таблицы TableView при закрытии модального окна? Задача Есть...

Автоматическое обновление данных в tableView
У меня в программе на главной форме расположена таблица в представлении QtableView , данные записаны через QStandartItemModel. В программе...

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

1
77 / 77 / 77
Регистрация: 29.01.2017
Сообщений: 167
01.04.2017, 22:31
еще один вариант
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
 
public class Test extends Application {
 
    final HBox hb = new HBox();
    private final ObservableList<Person> data =
            FXCollections.observableArrayList(
                    new Person("Jacob"),
                    new Person("Isabella"),
                    new Person("Ethan"),
                    new Person("Emma"),
                    new Person("Michael"));
    private TableView<Person> table = new TableView<>();
 
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group());
        stage.setTitle("Table View Sample");
        stage.setWidth(450);
        stage.setHeight(550);
 
        Person.setTable(table);
        table.setEditable(true);
 
        TableColumn<Person, String> firstNameCol = new TableColumn<>("First Name");
        firstNameCol.setMinWidth(100);
        firstNameCol.setCellValueFactory(new PropertyValueFactory<>("firstName"));
 
        table.setItems(data);
        table.getColumns().add(firstNameCol);
 
 
        final Button button1 = new Button("Edit1");
        button1.setOnAction(e -> {
            System.out.println(data.get(2).getFirstName());
            data.get(2).setFirstName("abcdef");
            System.out.println(data.get(2).getFirstName());
        });
 
        final Button button2 = new Button("Edit2");
        button2.setOnAction(e -> {
            Person temp = data.get(2);
            temp.setFirstName("ghijkl");
            data.set(2, temp);
        });
 
        hb.getChildren().addAll(button1, button2);
        hb.setSpacing(3);
 
        final VBox vbox = new VBox();
        vbox.setSpacing(5);
        vbox.setPadding(new Insets(10, 0, 0, 10));
        vbox.getChildren().addAll(table, hb);
 
        ((Group) scene.getRoot()).getChildren().addAll(vbox);
 
        stage.setScene(scene);
        stage.show();
    }
 
    public static class Person {
        static TableView table;
 
        private final SimpleStringProperty firstName;
 
        private Person(String fName) {
            this.firstName = new SimpleStringProperty(fName);
        }
 
        public String getFirstName() {
            return firstName.get();
        }
 
        public void setFirstName(String fName) {
            firstName.set(fName);
            table.refresh();
        }
 
        static void setTable(TableView<Person> table) {
            Person.table = table;
        }
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2017, 22:31
Помогаю со студенческими работами здесь

Обновление tableView каждые n секунд javaFX
Как можно сделать обновление tableView каждые n секунд? Добавлено через 4 часа 35 минут Есть предложения?) Добавлено через 37...

Обновление tableview после выбора пункта combobox
Всех с новым годом) Помогите пожалуйста в решении следующей проблемы. У меня на главном окне имеется 2 компонента tableview и combobox....

Обновление tableview после добавление новой записи
Доброго времени суток. Выгружаю в tableview данные из таблицы nomenclatura. На форме 2 кнопки, первая добавляет запись прям в этом...

Перенос текста в tableView
Товарищи подскажите, не могу разобраться: рисую таблицу следующим образом ui-&gt;tableView-&gt;reset(); QString s; ...

Выравнивание текста в ячейке грида при вводе текста
Вечер добрый. Не подскажите, у меня выравнивание работает (по вертикале и 5 пикселей от левого края по горизонтали) int x,y; x =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru