Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Обновление формы списка после изменения данных в детальной форме / 13 сообщений из 13, страница 1 из 1
19.02.2013, 07:48:26
    #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
19.02.2013, 11:34:07
    #38157033
badboychik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление формы списка после изменения данных в детальной форме
тут вариант предложили, делать подчиненное окно не на основе jFrame а на основе jPanel, пихать его в диалоговое окно и потом после закрытия обновлять главное окно.
http://www.coderanch.com/t/346099/GUI/java/Update-Data-Frames

Но минус в том что в окне появляются дополнительные кнопки "ОК" или "Yes","No","Cancel"
...
Рейтинг: 0 / 0
19.02.2013, 18:59:55
    #38157921
badboychik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление формы списка после изменения данных в детальной форме
О Боже, я это сделал сам :)
...
Рейтинг: 0 / 0
19.02.2013, 19:01:45
    #38157924
danatriel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление формы списка после изменения данных в детальной форме
Если не сложно напиши как сделал:) Может у кого возникнет такой же вопрос
...
Рейтинг: 0 / 0
19.02.2013, 19:17:04
    #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
19.02.2013, 19:31:15
    #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
19.02.2013, 22:53:30
    #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
19.02.2013, 23:15:08
    #38158177
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление формы списка после изменения данных в детальной форме
badboychik,
почитайте что такое EDT и как работает Swing. Вот в этой книге, во второй главе кажется, понятно и коротко написано. Swing
...
Рейтинг: 0 / 0
20.02.2013, 11:31:44
    #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
20.02.2013, 12:52:42
    #38158800
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление формы списка после изменения данных в детальной форме
2 варианта в зав-ти от ТЗ и БЛ:
- Модальный диалог и на кнопку ОК обновляем только VIEW одной строки. Т.к. коммит и данные уже на сервере.
- Не модальнвя форма с кучей листенеров и событиями по смене фокуса и смене хозяина-привязанного окна.

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


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