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

Почему не заполняется jList

24.04.2012, 16:09. Показов 3635. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При смене Item-а в jComboBox я хочу, чтобы менялся список JList в зависимости от параметра запроса. Код такой:
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
  private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
        // Add your handling code here:
        String project = jComboBox1.getSelectedItem().toString();
          try{  
    Statement ValuesSt = conn.createStatement();
    if (project != ""){
    ResultSet rsValues = ValuesSt.executeQuery("SELECT  *  FROM Loading_DocSector WHERE Project = '"+project+"'  ORDER BY proj");
 
    while (rsValues.next()) {
        DefaultListModel dlm = (DefaultListModel) jList1.getModel();
 
            dlm.addElement(rsValues.getString("proj"));
 
    }
    jList1.setSelectedIndex(0);
    jList1.setVisibleRowCount(-1);
    rsValues.close();
    ValuesSt.close();
 
    
    }
    }catch(SQLException ex) {
   JOptionPane.showMessageDialog(this, "SQLException: " + ex, "Error", JOptionPane.ERROR_MESSAGE);
     }
    }
Ошибок нет, сам JComboBox выдает переменную "project", а список не заполняется. Что я сделала не так? Подскажите, пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.04.2012, 16:09
Ответы с готовыми решениями:

Почему не заполняется полигон?
Почему-то координаты не записываются в массив "Points" ну и соответственно не рисуется полигоном Graphics g = this.CreateGraphics(); ...

Почему не заполняется таблица?
Добрый вечер товарищи!!! Вот фрагмент кода, который записывает в таблицу (датагрид) данные из текстбоксов!Я не могу понять почему при...

Почему не заполняется дерево?
Всё никак не могу заполнить дерево. Исходя из моих тестов, не создается даже корень. Вот мой код заполнения: if (root = 0) { Tree...

10
mishgun
24.04.2012, 19:16
Model vi izmenili no teper zhe nado izmenit list - dat emu izmenennuyu Model

Java
1
JList.setModel(dlm);
Vtoroy variant - ne ispolzovat Model voobshe - zapihnut vse dannie iz ResultSet v Vector i updatnut sushestvuyushiy - jList.setListData(Vector listData) ili sozdat noviy JList
Java
1
JList newJList = new JList(Vector listData);
3 / 3 / 3
Регистрация: 09.07.2008
Сообщений: 422
25.04.2012, 10:19
Мне кажется, правильнее обновить модель. Т.е.:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
...
while (rsValues.next()) {
DefaultListModel dlm = (DefaultListModel) jList1.getModel();
  dlm.addElement(rsValues.getString("proj"));
}
// ------------------------ add-in: start
jList1.setModel(dlm);
jList1.validate();
// jList1.updateUI(); // раскоментировать, если после добавления модели 
                      // не происходит перерисовки view.
// ------------------------ add-in: end
jList1.setSelectedIndex(0);
...
0
0 / 0 / 0
Регистрация: 17.04.2012
Сообщений: 28
25.04.2012, 12:13  [ТС]
Сделала через вектор таким образом:
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
   private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
        // Add your handling code here:
         project = jComboBox1.getSelectedItem().toString();
        
        System.out.println(project);   
     //  JOptionPane.showMessageDialog(this, project, "", JOptionPane.OK_OPTION); 
          try{  
    Statement ValuesSt = conn.createStatement();
    if (project != ""){
    ResultSet rsValues = ValuesSt.executeQuery("SELECT  *  FROM Loading_DocSector WHERE Project = '"+project+"' ORDER BY proj");
 
    Vector Data = new Vector();
    while (rsValues.next()) {
 
            System.out.println(rsValues.getString("proj")); 
            Data.add(rsValues.getString("proj")); 
 
    }
    jList1.setListData(Data);
    jList1.setSelectedIndex(0);
    rsValues.close();
    ValuesSt.close();
 
    
    }
    }catch(SQLException ex) {
   JOptionPane.showMessageDialog(this, "SQLException: " + ex, "Error", JOptionPane.ERROR_MESSAGE);
     }
    }
Работает. Огромное спасибо за помощь.
P.S. После 6-го Билдера многое не понятно. Если не против, буду спрашивать...
0
0 / 0 / 1
Регистрация: 29.05.2009
Сообщений: 52
28.04.2012, 15:22
Код работы с DB не очень аккуратен. Можно получить memory leack. Лучше так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Statement ValuesSt = null;
ResultSet rsValues = null;
try {
  ValuesSt = conn.createStatement();
  rsValues = ValuesSt.executeQuery("...");
  // работаем с выборкой
 
} catch (SQLException ex) {
  // отрабатываем исключение
 
} finally {
  if (rsValues != null) { try { rsValues.close(); } catch (Exception ex) { }
  if (ValuesSt != null) { try { ValuesSt.close(); } catch (Exception ex) { }
}
Ну и по мелочи - не зачем брать Statement если project == null. Лучше так:
Java
1
2
3
4
if (project != null && !project.equals("")){
  ValueSt = conn.createStatement();
  // ...
} // if
Вместо сборки в ручную SQL-запроса лучше использовать PrepareStatement и нужные параметры биндить (bind) - этим убережешься от SQL-injection

Ах. Да! Vection в данном случае совершенно не имеет смысл использовать, т.к. он является тредо-безопасным и из-за этого работает медленней обычного ArrayList.


Ну и на последок: тяжелые вещи вроде выборки из базы и прочую тяжелую логику лучше делать в отдельном треде, а не в том-же где произошло событие (ActionEvent) это позволит сделать пользовательский интерфейс (GUI) более отзывчивым, без зависаний.

Смешивать обновление данных GUI (listModel) лучше отдельно от кода работы с БД. Что-то типа этого:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
boolean hasError = false;
Statement st = ...;
try {
  // process and aggregate SQL result
 
} catch (Exception ex) {
 // process Exception user dialog
 hasError = true;
} finally {
 // close all opened resourses;
}
 
if ( ! hasError) {
  // process some GUI logic like update ListModel
}
Удачи!
0
mishgun
28.04.2012, 18:53
Дяденька а в API нету конструкторов и методов для JList чтоб работать с ArrayList.Про Вектор мы как то и сами знаем но малость ограничены API так что не обессудьте если чё....
0 / 0 / 0
Регистрация: 17.04.2012
Сообщений: 28
29.04.2012, 09:49  [ТС]
Спасибо за поправку кода. Сосет дельный. Буду учиться.
0
0 / 0 / 1
Регистрация: 29.05.2009
Сообщений: 52
29.04.2012, 10:43
Цитата Сообщение от mishgun
Дяденька а в API нету конструкторов и методов для JList чтоб работать с ArrayList.Про Вектор мы как то и сами знаем но малость ограничены API так что не обессудьте если чё....
На этот случай всегда есть интерфейс ListModel ну или переопределить AbstractListModel и сделать всё так как надо. Поверьте, в SWING чаще проще переопределить абстрактный класс или интерфейс и получить большую производительность чем подстраиваться под имеющиеся реализации.
0
mishgun
29.04.2012, 19:42
Вы б почитали посты человека.Она только учится а вы хотите чтоб она занималась переопределнием объектов...
0 / 0 / 1
Регистрация: 29.05.2009
Сообщений: 52
29.04.2012, 21:05
Цитата Сообщение от mishgun
Вы б почитали посты человека.Она только учится а вы хотите чтоб она занималась переопределнием объектов...
Я не хочу, просто предлагаю более эффективные варианты решения проблемы. А если писать как получается, лишь бы быстрее то получится фигня. Так и появляются мифы о тормознутом SWING и прочее.
0
3 / 3 / 3
Регистрация: 09.07.2008
Сообщений: 422
01.05.2012, 10:11
Цитата Сообщение от Dederer
Цитата Сообщение от mishgun
Вы б почитали посты человека.Она только учится а вы хотите чтоб она занималась переопределнием объектов...
Я не хочу, просто предлагаю более эффективные варианты решения проблемы. А если писать как получается, лишь бы быстрее то получится фигня. Так и появляются мифы о тормознутом SWING и прочее.
Доброго времени суток!

Dederer, в Вашем профайле я не нашел контактной информации. Пожалуйста, сообщите Ваш e-mail или скиньте пустое письмо на grant.slkuni@gmail.com. Я ищу опытного специалиста в области SWING. Подробности при переписке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.05.2012, 10:11
Помогаю со студенческими работами здесь

Почему не заполняется список?
void HashTable::insert(int student_number, std::string f_name, std::string m_name, std::string l_name, std::string debts) { ...

Почему не заполняется форма?
Я создала форму, в которую входят поля из разных таблиц. Подскажите почему, когда я пытаюсь заполнить эту форму, в некоторые поля данные не...

Почему не заполняется массив vector?
Здравствуйте! Не могу понять, почему не заполняется массив vector.. Он в классе объявлен типа public. #include...

Почему не заполняется данный массив?
Добрый день, почему массив не присваивает значения $i=1; $query1 = "SELECT * FROM stavka where id_group='$_SESSION' order by...

Почему некорректно заполняется структура?
1-й вариант #include <fstream> #include <iostream> #include <conio.h> using namespace std; struct { uint16_t bfType; ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru