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

Не могу понять где ошибка (ListSelectionModel)

14.03.2013, 11:28. Показов 975. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот кусок кода:
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
agreeUpd1.addActionListener(new ActionListener() {     //нажали checkBox
            @Override
            public void actionPerformed(ActionEvent e) {      
                if(agreeUpd1.isSelected()){       //checkBox вкл
                    buttonAdd1.setEnabled(false);
                    buttonUpdate1.setEnabled(true);
 
                            ListSelectionModel lsm = table1.getSelectionModel();        //следит за тем, какой ряд выделяют в таблице
                            lsm.addListSelectionListener(new ListSelectionListener() {
                            @Override
                            public void valueChanged(ListSelectionEvent e) {      //дублируем строки из таблицы в textField
                            if(table1.getSelectedRow()!=0)        //не дублируем, если выбран ряд с заголовками
                            {
                                textFieldSurname.setText(String.valueOf(table1.getValueAt(table1.getSelectedRow(),1)));
                                textFieldName.setText(String.valueOf(table1.getValueAt(table1.getSelectedRow(),2)));
                                textFieldPatronymic.setText(String.valueOf(table1.getValueAt(table1.getSelectedRow(),3)));
                                textFieldDateBirth.setText(String.valueOf(table1.getValueAt(table1.getSelectedRow(),4)));
                            }
                        }
                    });
                }
                else {     //если checkBox выкл
                    buttonAdd1.setEnabled(true);
                    buttonUpdate1.setEnabled(false);
                    }
                }
 
        });
Не могу понять в чем проблема. Благодаря этой штуке ListSelectionModel у меня в taxtField'ы копируется то, что находится в ячейках таблицы. Начинает работать ListSelectionModel когда у меня checkBox вкл. Вроде бы все логично построено, НО когда я снова нажимаю на checkBox, то есть теперь он не выделен (выкл), ListSelectionModel все равно продолжает работать,когда я выделяю ячейки в таблице, хотя вроде бы через условие if не должен проходить - то есть у меня продолжаются копироваться значения из ячеек в textField'ы! Как сделать, чтобы такого недоразумения не было???

PS: заранее извиняюсь за тупость (java изучаю недавно, причем после С++) и за то, что возможно не в том топике написал.

Добавлено через 11 часов 34 минуты
эх, никто не поможет
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.03.2013, 11:28
Ответы с готовыми решениями:

Не могу понять, где ошибка
Здравствуйте, программисты Java. Я решил написать программу, которая должна будет вычислять количество возможных комбинаций значений...

Ошибка в программе.Не могу понять где
Создать класс «Самолет», содержащий следующие закрытые поля: • Название пункта назначения; • Шестизначный номер рейса; • Время...

Не могу понять в где ошибка в Java коде
Помогите пожалуйста. изучаю Java по книге там такой код. //Использование цыкла do-while для выбора пункта меню class Menu { ...

4
 Аватар для Antenka
56 / 56 / 0
Регистрация: 15.03.2013
Сообщений: 88
15.03.2013, 18:07
Поможет!

После того, как у Вас получилось влезть по следующему условию:
Java
1
if(agreeUpd1.isSelected()){       //checkBox вкл
Вы внутри цепляете следующий обработчик:
Java
1
lsm.addListSelectionListener(new ListSelectionListener() { ...
который Вам портит жизнь и отрабатывает каждый раз, когда вы чего-то выделяете в таблице (не зависимо от того, выделен у Вас чекбокс или нет). По сути, код забегает сразу на 12ю строку.

Совет номер раз: я бы избегала использования анонимных хэндлеров. В итоге - это большое и неподконтрольное Вам зло

Совет номер два: если обработчик более не нужен, просто снимите слушатель.
0
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 25
15.03.2013, 19:14  [ТС]
Цитата Сообщение от Antenka Посмотреть сообщение
Поможет!

После того, как у Вас получилось влезть по следующему условию:
Java
1
if(agreeUpd1.isSelected()){       //checkBox вкл
Вы внутри цепляете следующий обработчик:
Java
1
lsm.addListSelectionListener(new ListSelectionListener() { ...
который Вам портит жизнь и отрабатывает каждый раз, когда вы чего-то выделяете в таблице (не зависимо от того, выделен у Вас чекбокс или нет). По сути, код забегает сразу на 12ю строку.

Совет номер раз: я бы избегала использования анонимных хэндлеров. В итоге - это большое и неподконтрольное Вам зло

Совет номер два: если обработчик более не нужен, просто снимите слушатель.
Спасибо, учту в будущем ваши советы. Только вот как снять в коде слушатель, я не знаю, ведь у него вроде бы как нет никаких свойств close или подобных. Как быть? Если есть более рациональный путь, чтобы при вкл чекбокса у меня дублировались строки из таблицы, которые выделены, то подскажите, пожалуйста.
0
 Аватар для Antenka
56 / 56 / 0
Регистрация: 15.03.2013
Сообщений: 88
15.03.2013, 20:36
У addListSelectionListener есть брат-близнец removeListSelectionListener, который снимает указаный слушатель с объекта.

Т.е., если Вы планируете опираться на них, то нужно обозвать Ваш анонимный слушатель и передавать его параметром в addListSelectionListener. А когда у нас срабатывает "выключение" чекбокса, мы можем его успешно снять оттуда.

Вот тут много интересных примеров на эту тему: Demos and Usage of javax.swing.JList.removeListSelectionListener(ListSelectionListener listener)
0
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 25
15.03.2013, 20:39  [ТС]
Цитата Сообщение от Antenka Посмотреть сообщение
У addListSelectionListener есть брат-близнец removeListSelectionListener, который снимает указаный слушатель с объекта.

Т.е., если Вы планируете опираться на них, то нужно обозвать Ваш анонимный слушатель и передавать его параметром в addListSelectionListener. А когда у нас срабатывает "выключение" чекбокса, мы можем его успешно снять оттуда.

Вот тут много интересных примеров на эту тему: Demos and Usage of javax.swing.JList.removeListSelectionListener(ListSelectionListener listener)
Большое спасибо, обязательно попробую так сделать, когда буду на рабочем месте!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2013, 20:39
Помогаю со студенческими работами здесь

Массив: Выводит одни нули, не могу понять, где ошибка
public class Massiv { public static void main(String args) { int x = new int ; for(int i = 1; i < 20; i++) { ...

не могу понять где ошибка
Вот код. не могу понять, что не так? $newbd = 'newbd'; $host = 'localhost'; $user = 'car_user'; $pass = 'car'; ...

Не могу понять где ошибка!
int _tmain(int argc, _TCHAR* argv) { int W , Color , i,j, k; rebro Reb; setlocale(LC_ALL, "");//вывод кирилицы не кракозябрами ...

Не могу понять где ошибка!
Написать приложение, позволяющее создавать целочисленный файл, выводить его в многострочный редактор текстов, а также производить указанные...

Где ошибка не могу понять
Привет. Выдает такую ошибку. Unclosed """ in "blocks/userprofile.twig" at line 73 Помогите пожалуйста исправить вот сам код ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru