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

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

24.04.2012, 16:09. Показов 3653. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
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
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru