Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
 Аватар для ][irurg
181 / 180 / 38
Регистрация: 16.06.2010
Сообщений: 511

JList update

19.10.2013, 21:08. Показов 3133. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть список строк, как обновить 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package consoleapp;
 
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
 
/**
 *
 * @author Admin
 */
public class MainFrame extends JFrame {
 
    JList jList;
    List<String> data;
 
    public MainFrame() {
        this.setSize(500, 300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        data = new ArrayList<String>();
        jList = new JList(new myListModel());
        JPanel panel = new JPanel();
        JButton button = new JButton("ok");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                data.add("Java duke");
                updateJList();
            }
        });
        panel.add(button);
 
        this.add(jList, BorderLayout.CENTER);
        this.add(panel, BorderLayout.SOUTH);
        this.setVisible(true);
    }
 
    private void updateJList() {
        jList.setModel(new myListModel());// возможно ли без создания новой модели?
    }
 
    private class myListModel extends AbstractListModel<String> {
 
        @Override
        public int getSize() {
            return data.size();
        }
 
        @Override
        public String getElementAt(int index) {
            return data.get(index);
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.10.2013, 21:08
Ответы с готовыми решениями:

Jlist с иконками
Пишу простенький ftp клиент для себя, с парой нужных мне ф-ций... В общем с подключением и выводом списка файлов я уже разобрался, а вот с...

JList с картинками
Вывести список, напротив каждого элемента должна быть картинка. Сделал класс public class ImageListCellRenderer extends JLabel...

jList.addListSelectionListener()
// этот обработчик реагирует на выделение элементов в списке JList list.addListSelectionListener(new ListSelectionListener() { ...

9
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
19.10.2013, 21:45
Может я ошибаюсь, но список должен, по идее, сам обновляться если изменилась модель.
1
 Аватар для ][irurg
181 / 180 / 38
Регистрация: 16.06.2010
Сообщений: 511
19.10.2013, 22:26  [ТС]
verylazy, ссылка не активная. Мне нужно чтобы при всяком изменении списка data , JList обновлял свое содержимое, такое происходит если каждый раз при изменении списка создавать новую модель, есть ли другие варианты.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
21.10.2013, 10:50
Цитата Сообщение от ][irurg Посмотреть сообщение
есть ли другие варианты.
Есть. Можно обновлять существующую модель.
0
 Аватар для ][irurg
181 / 180 / 38
Регистрация: 16.06.2010
Сообщений: 511
21.10.2013, 11:36  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
Можно обновлять существующую модель
А как ее обновить, если в моем случае она не содержит данные,а получает их со стороны в методе
Цитата Сообщение от ][irurg Посмотреть сообщение
public String getElementAt(int index) {
return data.get(index);
}
Можно поподробнее?
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
21.10.2013, 11:54
А как Вы тогда вообще понимаете, что данные изменились?
0
 Аватар для ][irurg
181 / 180 / 38
Регистрация: 16.06.2010
Сообщений: 511
21.10.2013, 13:00  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
А как Вы тогда вообще понимаете, что данные изменились?
Java
1
2
3
4
5
6
7
button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                data.add("Java duke");
                updateJList();
            }
        });
Добавлено через 25 минут
Вот так Jlist обновляется,но каждый раз приходится создавать его модель заново или это не так критично?
Java
1
2
3
private void updateJList() {
          jList.setModel(new myListModel());// возможно ли без создания новой модели?
          }
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
21.10.2013, 13:49
То есть модель Ваша. Ну и почему не сделать в ней метод добавления данных, в котором просто будет вызываться уведомление всех listener-ов?
1
 Аватар для ][irurg
181 / 180 / 38
Регистрация: 16.06.2010
Сообщений: 511
21.10.2013, 22:55  [ТС]
Сделал так
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package consoleapp;
 
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
 
public class MainFrame extends JFrame {
 
    JList jList;
    List<String> data;
 
    public MainFrame() {
        this.setSize(500, 300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        data = new ArrayList<String>();
        jList = new JList(new myListModel());
        JPanel panel = new JPanel();
        JButton button = new JButton("ok");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                data.add("Java duke");
                updateJList();
            }
        });
        panel.add(button);
        this.add(jList, BorderLayout.CENTER);
        this.add(panel, BorderLayout.SOUTH);
        this.setVisible(true);
    }
 
    private void updateJList() {
        ((myListModel) jList.getModel()).update();
    }
 
    private class myListModel extends AbstractListModel<String> {
 
        public void update() {
            fireContentsChanged(this, 0, 0);
        }
 
        @Override
        public int getSize() {
            return data.size();
        }
 
        @Override
        public String getElementAt(int index) {
            return data.get(index);
        }
    }
}
Работает, но не уверен в правильности передаваемых параметров в fireContentsChanged(this, 0, 0);
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
22.10.2013, 10:29
Я бы вторым параметром передавал не 0, а size-1. Модель изменилась от первого до последнего индекса. Хотя если добавлять в начало - можно и 0.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2013, 10:29
Помогаю со студенческими работами здесь

Scrool JList
Доброго времени суток. Возник такой вопрос. Есть лист со своим вертикальным скрулбаром, но вот они ни в какую не хочет скролить. При...

Почему не заполняется jList
При смене Item-а в jComboBox я хочу, чтобы менялся список JList в зависимости от параметра запроса. Код такой: private void...

Изменение содержимого в JList
Привет! использую jListLog класса JList для ведения журнала действий; однако содержимое jListLog никак не обновляется. Подскажите, что не...

JList Listener непонятки
Здравствуйте, помогите пожалуйста исправить ошибку. //Процедура вызывается из конструктора создает список категории - работает ...

Добавление данных в JList
Ситуация такова: Нужно подключить Vector к JList. Подключить пытался 3-мя разными способами при vzvodList.setListData(vz) и...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
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