МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів
Контакти
Тлумачний словник Авто Автоматизація Архітектура Астрономія Аудит Біологія Будівництво Бухгалтерія Винахідництво Виробництво Військова справа Генетика Географія Геологія Господарство Держава Дім Екологія Економетрика Економіка Електроніка Журналістика та ЗМІ Зв'язок Іноземні мови Інформатика Історія Комп'ютери Креслення Кулінарія Культура Лексикологія Література Логіка Маркетинг Математика Машинобудування Медицина Менеджмент Метали і Зварювання Механіка Мистецтво Музика Населення Освіта Охорона безпеки життя Охорона Праці Педагогіка Політика Право Програмування Промисловість Психологія Радіо Регилия Соціологія Спорт Стандартизація Технології Торгівля Туризм Фізика Фізіологія Філософія Фінанси Хімія Юриспунденкция |
|
|||||||
Клас JList бібліотеки SwingПодії і потоки Ми не розглядали потоки і не зможемо собі зараз ясно уявити, як вони пов'язані із слухачами. Але, забігаючи вперед, слід сказати, що такий зв'язок у багатьох випадках є і виражається вона в наступному. Обробка подій візуальної бібліотеки Java реалізована таким чином, що на час роботи деякого методу якогось слухача, ніякі дії з боку користувача не викликають ніякого ефекту на це застосування, перемальовування візуальних компонент застосування не виконується. Це слід враховувати і не виконувати довго працюючі алгоритми усередині слухача. У тих випадках, коли вимагається виконання якогось довго працюючого алгоритму, слід робити спеціальні заходи для того, щоб не заблокувати роботу застосування. Застосування подій і слухачів на практиці ще не раз зустрінеться нам в ході подальшого викладу. Зокрема, в наступній темі, присвяченій візуальному представленню інформації у вигляді списків або таблиць. Повернемося до домашнього завдання на сьогоднішнє заняття - до застосування "записник". Ми створили вже досить "розумне" застосування, але все таки воно не позбавлене недоліків. Основною з них полягає в тому, що ми можемо переглядати записи нашого записника тільки по одній, і не бачимо усю картину в цілому. Тобто нам бажано було б помістити на вікно нашого застосування список із скролінгом, що вміщує усі записи і дати можливість вибору і редагування конкретного запису. Для цього нам вимагається познайомитися з можливостями створення таблиць. Бібліотека Swing містить два основні засоби роботи з таблицями - це класи JList і JTable . В порівнянні з JList клас JTable містить розширені засоби. Так JList орієнтований на перегляд однієї колонки, а JTable дозволяє переглядати декілька колонок, а також редагувати поля колонок. Проте, у багатьох випадках прийнятніше використовувати все-таки саме JList, хотя-бы тому, що він простіший. Базові можливості, закладені в основу бібліотеки Swing, дозволяють змінювати поведінку класу JList в дуже широких межах, забезпечуючи, зокрема, і можливість виведення списку, що складається з декількох колонок. Розглянемо документацію по JList . Клас JList має 4 конструктори. public JList()Створює порожній список. public JList(Object[] listData)Список на основі масиву об'єктів. public JList(Vector listData)Список з елементів вектора. Краще було б мати конструктор public JList (List listData) public JList(ListModel dataModel)Найабстрактніший і гнучкіший варіант. Можна створити свій клас, що реалізовує інтерфейс ListModel і що забезпечує елементи для списку з будь-якого джерела (зазвичай такий клас будують на основі абстрактного класу AbstractListModel, в якому вже реалізована частина необхідної функціональності). Якщо не говорити про конструктор за умовчанням, то найпростіший конструктор - це конструктор, що приймає масив об'єктів. Цей конструктор застосовний тоді, коли у нас є готовий масив об'єктів, і ми хочемо відобразити його у вигляді списку на екрані. Єдине питання полягає в тому, як JList відображує ці об'єкти, адже список повинен складатися з рядків. Тут застосований досить стандартний для JFC прийом. У списку відображуються рядки, отримані шляхом викликів методу toString для об'єктів, що входять в список. Розглянемо такий фрагмент String[] data = {"one", "two", "three", "four"};JList dataList = new JList(data);JScrollPane scrollPane = new JScrollPane(dataList);Тут сформований список JList на основі масиву, цей список поміщений всередину JSrollPane (як і у випадку з JTextArea, який ми розглядали раніше). Залишилося тільки додати scrollPane на якусь панель нашого застосування. Поміщати JList всередину JSrollPane - стандартний прийом для забезпечення скроллируемости списку. Другий конструктор застосовний тоді, коли у нас є колекція об'єктів класу Vector . Але обоє ці конструктора дозволяють створити лише статичні списки. Після створення списку немає ніякої можливості змінити його. Якщо звернутися до документації по JList, то ми там не знайдемо жодного методу для додавання чого-небудь в список. Це пов'язано з тим, що клас JList є досить складною по структурі конструкцією і, як і багато інших класів Swing, побудований на базі архітектури MVC ( Model - View - Controller ). Розгляд архітектури MVC це окрема тема, яку ми зараз не зачіпатимемо. Ми просто розберемося, як нам побудувати список, що модифікується. Для цього треба звернути увагу на інтерфейс ListModel і класи AbstractListModel і DefaultListModel . Список типу JList працює з даними, складовими власне список, не безпосередньо, а через спеціальний об'єкт "модель даних". Інтерфейс ListModel визначає мінімальний набір методів, який вимагається класу JList від "моделі даних". Якщо звернутися до документації, то можна побачити, що ці методи дозволяють упізнати кількість елементів в списку (метод getSize ), вибрати елемент списку (метод getElementAt ), а також зареєструвати і відключити слухачів (методи addListDataListener і removeListDataListener ). Клас AbstractListModel є абстрактним допоміжним класом, в якому реалізований набір методів, необхідних для підтримки слухачів типу ListDataListener . тобто усі реальні класи, що реалізовують "модель даних" для JList зручно будувати на базі класу AbstractListModel, - тоді не доведеться реалізовувати методи addListDataListener і removeListDataListener . І, нарешті, клас DefaultListModel . Цей клас задовольняє інтерфейсу ListModel і, що важливо для нас, має методи для додавання елементів в список (методи add і addElement ), модифікації існуючих елементів ( setElementAt ) і видалення із списку (ряд методів remove.. ). Можна побудувати і свій клас, що реалізовує інтерфейс ListModel, визначивши в нім будь-які інші методи і надавши йому необхідні властивості. Але, звичайний досить класу DefaultListModel . Резюмуючи усе це, можна зробити висновок, що для реалізації списку типу JList, що модифікується, можна: - побудувати об'єкт класу DefaultListModel; - побудувати об'єкт класу JList з використанням конструктора public JList(ListModel dataModel), передавши йому як параметр побудований об'єкт класу DefaultListModel; - виконувати модифікації списку через об'єкт класу DefaultListModel - візуальне представлення списку при цьому мінятиметься автоматично. Читайте також:
|
||||||||
|