powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Обновление формы списка после изменения данных в детальной форме
13 сообщений из 13, страница 1 из 1
Обновление формы списка после изменения данных в детальной форме
    #38156740
Фотография badboychik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привет ) Такая вот тривиальная задача, по идее возникает у каждого, наверно.
Переделываю чужую программу, получение и редактирование данных написал, вопрос теперь в интерфейсных удобствах. Сам в Swing новичок.
Есть форма с jList и детальная форма с полями некоего "инструмента". jList заполняю так:

объявляю список
Код: java
1.
private ArrayList<Instrument> InstrumentList;


вывожу в конструкторе
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
jInstrumentList.setModel(new javax.swing.AbstractListModel() {
            
    @Override
    public int getSize() {
         return InstrumentList.size();
    }

    @Override
    public Object getElementAt(int i) {
         return InstrumentList.get(i).getName();
  }          
 
});


кнопка редактирования:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    private void jButtonEditActionPerformed(java.awt.event.ActionEvent evt) {                                            
        int i = jInstrumentList.getSelectedIndex();
        EditInstrument(i);
        // тут надо обновить данные списка?
    }
    private void EditInstrument(int i) {
        int id_instr = InstrumentList.get(i).getIdInstrument();
        
        InstrumentEdit win = new InstrumentEdit(id_instr, true);
        win.setLocationRelativeTo(this);
        win.setVisible(true);
    }


Вопрос в том, как сделать, чтобы при сохранении результатов редактирования в списке загрузились новые данные. Желательно обновить только один элемент а не все тянуть. Я находил примеры, но они были простые и с обычным массивом а не с БД. Внятных примеров с методами fire*** тоже не нашел.
Я должен из детальной формы вызывать какой то метод главной формы или напрямую писать в ту коллекцию, или в главной создать некий "Listener" который среагирует на окончание редактирования?
Если помните, где такие примеры описываются и по каким словам гуглить, то перенаправьте на статью/книгу )

P.S. Еще - правильно ли использовать ArrayList<> или лучше вектор?
...
Рейтинг: 0 / 0
Обновление формы списка после изменения данных в детальной форме
    #38157033
Фотография badboychik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут вариант предложили, делать подчиненное окно не на основе jFrame а на основе jPanel, пихать его в диалоговое окно и потом после закрытия обновлять главное окно.
http://www.coderanch.com/t/346099/GUI/java/Update-Data-Frames

Но минус в том что в окне появляются дополнительные кнопки "ОК" или "Yes","No","Cancel"
...
Рейтинг: 0 / 0
Обновление формы списка после изменения данных в детальной форме
    #38157921
Фотография badboychik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О Боже, я это сделал сам :)
...
Рейтинг: 0 / 0
Обновление формы списка после изменения данных в детальной форме
    #38157924
danatriel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не сложно напиши как сделал:) Может у кого возникнет такой же вопрос
...
Рейтинг: 0 / 0
Обновление формы списка после изменения данных в детальной форме
    #38157952
Фотография badboychik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему это никому тут не интересно или это слишком азбучные истины, раз никто не снизошел до ответа. Ну все равно, выложу. Я примерно понимал, что дочернее окно открывается в другом потоке и надо добавить щепотку асинхронности, ну и догадался методом тыка.

Когда создали дочернее окно, назначаем ему делегат и передаем данные
Код: java
1.
win.addWindowListener(new WindowAdapterImpl(i, id_instr));


реализация слушателя-делегата
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
private class WindowAdapterImpl extends WindowAdapter {

        private final int i;
        private final int id_instr;

        public WindowAdapterImpl(int i, int id_instr) {
            this.i = i;
            this.id_instr = id_instr;
        }

        @Override
        public void windowClosed(WindowEvent e) { // следим за событием закрытия окна
            super.windowClosed(e); 
            InstrumentList.set(i, Instrument.getById(id_instr)); // устанавливаем измененный элемент, запрашивая из базы
        }
    }


Все, после закрытия дочернего окна, в списке меняется значение само
...
Рейтинг: 0 / 0
Обновление формы списка после изменения данных в детальной форме
    #38157970
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
badboychikПо моему это никому тут не интересно или это слишком азбучные истины, раз никто не снизошел до ответа.
Вы были на правильном пути на счет fire методов.

badboychik Ну все равно, выложу. Я примерно понимал, что дочернее окно открывается в другом потоке и надо добавить щепотку асинхронности, ну и догадался методом тыка.

Нет здесь ни других потоков, ни асинхронности. Всё работает в Event Dispatch Thread.

Когда создали дочернее окно, назначаем ему делегат и передаем данные
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
win.addWindowListener(new WindowAdapterImpl(i, id_instr));

[quot badboychik][src JAVA]
        @Override
        public void windowClosed(WindowEvent e) { // следим за событием закрытия окна
            super.windowClosed(e); 
            InstrumentList.set(i, Instrument.getById(id_instr)); // устанавливаем измененный элемент, запрашивая из базы
        }


[/quot]
Что даёт загрузка данных по закрытию окна? Данные в этом же окне?

badboychikВсе, после закрытия дочернего окна, в списке меняется значение само
Ааа... Ну, ректальный слегка подход. А как это окно вызывается? Это диалог?
...
Рейтинг: 0 / 0
Обновление формы списка после изменения данных в детальной форме
    #38158166
Фотография badboychik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
InstrumentEdit win = new InstrumentEdit(id_instr, true);
win.setLocationRelativeTo(this);
win.setVisible(true);



InstrumentEdit - это JFrame в котором редактируется одна запись. Список всех записей тоже в JFrame.
Почему нет потоков? Если после этого кода, чтото написать, оно сразу выполнится, хотя я еще дочернее не закрывал, поэтому надо событие закрытия ловить. А про fire*** нигде нет примеров. Я их переопределял, ставил точку останова и туда никогда не попадал, короче непонятно что с ними делать, если в списке не тупой вектор, а данные из БД
...
Рейтинг: 0 / 0
Обновление формы списка после изменения данных в детальной форме
    #38158177
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
badboychik,
почитайте что такое EDT и как работает Swing. Вот в этой книге, во второй главе кажется, понятно и коротко написано. Swing
...
Рейтинг: 0 / 0
Обновление формы списка после изменения данных в детальной форме
    #38158616
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
InstrumentEdit win = new InstrumentEdit(id_instr, true);
win.setLocationRelativeTo(this);
win.setVisible(true);
// Если это диалог, то вот сюда рантайм не дойдет, пока диалог не будет закрыть. Поэтому данные, возможно имело смысл обновлять здесь. Точно сказать сложно, потому что вся картина из общих отрывков не складывается.



badboychikInstrumentEdit - это JFrame в котором редактируется одна запись.

Почему не диалог?

badboychikПочему нет потоков? Если после этого кода, чтото написать, оно сразу выполнится, хотя я еще дочернее не закрывал, поэтому надо событие закрытия ловить.
А это не значит что поток "уснул", или окно запустилось в другом потоке. Этот же поток обслуживает все окна, всю отрисовку и все события, всех Swing окон.

badboychikА про fire*** нигде нет примеров. Я их переопределял, ставил точку останова и туда никогда не попадал, короче непонятно что с ними делать, если в списке не тупой вектор, а данные из БД
Там всё сложно. Вы обновляете данные, в коде самой ListModel. После этого вы должны сами вызвать правильный fire метод, он уведомит всех слушателей, в том числе и UI слой, что надо обновить картинку.
...
Рейтинг: 0 / 0
Обновление формы списка после изменения данных в детальной форме
    #38158800
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 варианта в зав-ти от ТЗ и БЛ:
- Модальный диалог и на кнопку ОК обновляем только VIEW одной строки. Т.к. коммит и данные уже на сервере.
- Не модальнвя форма с кучей листенеров и событиями по смене фокуса и смене хозяина-привязанного окна.

Первый вариант проще.
...
Рейтинг: 0 / 0
Обновление формы списка после изменения данных в детальной форме
    #38161755
Фотография badboychik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор// Если это диалог, то вот сюда рантайм не дойдет, пока диалог не будет закрыть.дойдет, т.к. у меня JFrame и после его открытия продолжается выполнение дальше.
Я повесил один листенер на его закрытие и все ОК стало.
...
Рейтинг: 0 / 0
Обновление формы списка после изменения данных в детальной форме
    #38161761
Фотография badboychik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
плюс теперь додумался как сделать биндинг и стало совсем приятно )
...
Рейтинг: 0 / 0
Обновление формы списка после изменения данных в детальной форме
    #38161841
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
badboychikавтор// Если это диалог , то вот сюда рантайм не дойдет, пока диалог не будет закрыть.дойдет, т.к. у меня JFrame и после его открытия продолжается выполнение дальше.
Я повесил один листенер на его закрытие и все ОК стало.
JFrame не диалог. И почему там JFrame, мы так ответа и не услышим. Ну и мне казалось, очевидным, что так работает только с модальными диалогами. Поэтому их удобно использовать.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Обновление формы списка после изменения данных в детальной форме
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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