Professional Documents
Culture Documents
Lekcija - 9n For Programming
Lekcija - 9n For Programming
ВВЕДЕННЯ В SWING
Глибовець А.М.
ВВЕДЕННЯ В UI
Перед початком вивчення Swing ви, як справжній
новачок, повинні задати питання, що таке UI?
Відповідь для новачків - це "користувальницький
інтерфейс".
Але оскільки мета цієї лекції полягає в тому, щоб ви
більше не були новачком, нам потрібно більш широке
визначення, ніж це.
ВВЕДЕННЯ В UI
Отже, я знову ставлю запитання: що таке UI?
Ви могли б визначити його як кнопки, на які натискаєте, поле
адреси, в яке вводите інформацію, і вікна, які відкриваєте і
закриваєте.
Все це - елементи UI, але це не тільки речі, які ви бачите на
екрані.
Мишка, клавіатура, гучність музики, кольору екрана,
використовувані шрифти та розташування об'єкта по
відношенню до іншого об'єкта - все це теж становить UI.
Взагалі кажучи, будь-який об'єкт, який бере участь у взаємодії
користувача і комп'ютера, є частиною UI.
Це здається таким простим, що ви, мабуть, здивуєтеся тому, як
багато людей і корпорацій займаються цим роками.
Дійсно, зараз є дисципліни в університетах, що повністю
присвячені цій взаємодії.
РОЛЬ SWING
Технологія Swing - це UI Java-платформа.
Вона виступає як програмне забезпечення, що керує
взаємодією користувача і комп'ютера.
По суті, вона служить посередником між
користувачем і комп'ютером.
Як Swing робить це?
Їх поведінка однакова.
використовується в меню.
Тільки JMenu:
add (): Додати ще один JMenu або JMenuItem до JMenu
(створення вкладеного меню).
ДОДАТКОВІ SWING-ВІДЖЕТИ
JSLIDER
Компонент JSlider використовується в програмі для
зміни числового значення.
Це швидкий і простий спосіб дозволити
користувачам візуально отримати відповідну реакцію
не тільки на їх поточний вибір, але побачити діапазон
допустимих значень.
Подумайте, ви могли б надати текстове поле і
дозволити користувачеві ввести значення, але тоді у
вас додається зайва робота - ви повинні гарантувати,
що введене значення є числом, яке потрапляє в
потрібний діапазон.
ДОДАТКОВІ SWING-ВІДЖЕТИ
JSLIDER
Важливими методами в JSlider є:
get / setMinimum (): Отримати / встановити мінімальне
значення, яке ви можете вибрати.
get / setMaximum (): Отримати / встановити максимальне
значення, яке ви можете вибрати.
get / setOrientation (): Отримати / встановити орієнтацію
JSlider (вгору / вниз або вправо / вліво).
get / setValue (): Отримати / встановити початкове
значення JSlider.
ДОДАТКОВІ SWING-ВІДЖЕТИ
JSPINNER
Багато в чому аналогічно JSlider ви можете
використовувати JSpinner, для того щоб дозволити
користувачам вибирати цілочисельне значення.
Перевагою є його компактний розмір у порівнянні з
JSlider.
Хоча недоліком є те, що ви не можете легко
встановити його межі.
ДОДАТКОВІ SWING-ВІДЖЕТИ
JSPINNER
Однак порівняння цих двох компонентів тут
закінчується.
JSpinner набагато більш гнучкий і може бути
використаний для вибору з будь-якої групи значень.
Крім вибору чисел він може бути використаний для
вибору дат, імен, кольорів, чого-завгодно.
Це робить JSpinner надзвичайно потужним,
дозволяючи вам надавати компонент, який містить
тільки існуючі варіанти.
У цьому він аналогічний JComboBox
ДОДАТКОВІ SWING-ВІДЖЕТИ
JSPINNER
Важливими методами є:
get/ setValue (): Отримати / встановити початкове
значення JSpinner, яке в базовому випадку має бути цілим
числом.
getNextValue (): Отримати таке значення, яке буде
вибрано після натискання клавіші управління курсором
"стрілка вгору".
getPreviousValue (): Отримати попереднє значення, яке
буде вибрано після натискання клавіші управління
курсором "стрілка вниз".
ДОДАТКОВІ SWING-ВІДЖЕТИ
JTOOLBAR
Компонент JToolBar виступає як палітра для інших
компонентів (JButtons, JComboBoxes і т.д.), які
спільно утворюють панелі інструментів, що
зустрічаються в більшості додатків.
Важливим методом JToolBar є is / setFloatable (), який
отримує / встановлює властивість: чи може JToolBar
переміщатися.
ДОДАТКОВІ SWING-ВІДЖЕТИ
JTOOLTIP
Ви, можливо, зустрічали JToolTip всюди, але ніколи
не знали, як вони називаються.
Вони схожі на пластикові кінці ваших шнурків - вони
всюди, але ви не знаєте правильної назви (вони
називаються aglet (пістон), якщо кому цікаво).
JToolTip - це невеликі "бульбашки", які спливають
тоді, коли ви наводите і тримайте курсор миші над
чим-небудь.
ДОДАТКОВІ SWING-ВІДЖЕТИ
JTOOLTIP
Вони можуть бути дуже корисні в додатках, надаючи
підказки для елементів, деталізуючи інформацію або
навіть показуючи повний текст елемента в стислих
UI.
Вони активізуються в Swing, якщо залишити курсор
миші над компонентом на певну кількість часу;
зазвичай вони з'являються приблизно через секунду
після зупинки мишки і залишаються видимими до
тих пір, поки курсор залишається над компонентом.
ДОДАТКОВІ SWING-ВІДЖЕТИ
JTOOLTIP
Компоненти JToolTip легко використовувати.
Метод setToolTip () є методом класу JComponent,
тобто, кожен Swing-компонент може мати підказку,
пов'язану з ним.
Хоча JToolTip і сам є Swing-класом, він, фактично, не
надає в даний час додаткової функціональності і не
повинен створюватися.
Ви можете звернутися до нього і використовувати,
викликаючи функцію setToolTip () в JComponent.
ДОДАТКОВІ SWING-ВІДЖЕТИ
JOPTIONPANE
Компонент JOptionPane - це свого роду
"прискорюючий" клас в Swing.
Часто, як UI-розробник, ви хотіли б надати миттєве
повідомлення для ваших користувачів, кажучи їм про
помилку або видаючи якусь іншу інформацію.
Можливо, ви хотіли б швидко отримати деякі дані,
наприклад, ім'я або номер.
ДОДАТКОВІ SWING-ВІДЖЕТИ
JOPTIONPANE
У Swing клас JOptionPane надає можливість виконати
ці рутинні завдання.
Замість того, щоб кожного разу винаходити колесо,
Swing надає базовий, але корисний клас для надання
UI-розробникам способу видачі та отримання
простих повідомлень.
ДОДАТКОВІ SWING-ВІДЖЕТИ
JOPTIONPANE
Певного роду хитрістю при роботі з JOptionPane є всі
його можливі варіанти, які ви можете
використовувати.
Одним з кращих способів вивчити JOptionPane - це
попрацювати з ним, закодувати і подивитися, що
вийшло.
Перейдіть краще на сторінку API JOptionPane
документації для їх перегляду.
ДОДАТКОВІ SWING-ВІДЖЕТИ
JTEXTAREA
Компонент JTextArea розвиває JTextField.
У той час як JTextField обмежений одним рядком
тексту, JTextArea дозволяє мати кілька рядків.
Думайте про нього, як про порожню сторінку, що
дозволяє ввести все що завгодно.
Як ви вже напевно здогадалися, JTextArea має багато
функцій, присутніх в JTextField; в кінці кінців, це
практично однакові частини.
ДОДАТКОВІ SWING-ВІДЖЕТИ
JTEXTAREA
Однак JTextArea пропонує кілька додаткових
функцій.
До них відносяться здатність переносити слова
(тобто, переносити довге слово в наступний рядок
замість обрізання по середині слова) і здатність
переносити текст (тобто, поміщати довгі рядки
тексту на наступний рядок замість створення дуже
довгого рядка, що вимагає наявності горизонтальної
полоси прокрутки).
ДОДАТКОВІ SWING-ВІДЖЕТИ
JTEXTAREA
Важливими методами для вирішення переносу рядка
і перенесення слова є:
is / setLineWrap (): Встановлює, чи повинен переноситися
рядок, якщо він стає занадто довгим.
is / setWrapStyleWord (): Встановлює, чи переноситися
слово на наступний рядок, якщо воно занадто довге.
ДОДАТКОВІ SWING-ВІДЖЕТИ
JSCROLLPANE
Розглядаючи наведений вище приклад, припустимо,
що JTextArea містить занадто багато тексту для
даного простору.
Що тоді?
}
}
ПОДІЇ
Компонент JList працює аналогічно.
Коли хтось вибирає щось у JList, ви виводите на
консолі повідомлення про вибраний об'єкт:
//myList - це JList, заповнений даними
myList.addListSelectionListener(new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e){
Object o = myList.getSelectedItem();
System.out.println(o.toString());
}
});
МОДЕЛІ
Ви повинні знати про Java Collections, набори Java-класів,
що обробляють дані.
До цих класів відносяться ArrayList, HashMap і Set.
Більшість програм використовує ці класи всюди при
переміщенні даних взад і вперед.
Однак при необхідності використання цих даних в UI
виникає одне обмеження.
UI не знає, як їх відображати.
Подумайте про це хвилинку.
Якщо у вас є JList і ArrayList деяких об'єктів даних
(наприклад, об'єктів Person), як JList дізнається, що
відображати?
Чи повинен він відображати тільки прізвище, або прізвище
та ім'я разом?
МОДЕЛІ
Ось де потрібна концепція моделі.
Хоча поняття моделі відноситься до більш широкої
області, я використовую поняття UI-модель для
опису класів, які компоненти використовують для
відображення даних.
Кожен компонент, який працює з колекцією даних в
Swing, використовує концепцію моделі, і це кращий
спосіб використання та управління даними.
Він чітко відокремлює роботу UI від
використовуваних даних (згадайте приклад MVC).
Модель описує компоненту, як відображати колекцію
даних.
МОДЕЛІ
Що я маю на увазі під словом "описує"?
Кожен компонент вимагає трохи різного опису:
JComboBox вимагає від своєї моделі опису тексту для
відображення у вигляді варіантів вибору і кількості існуючих
варіантів.
JSpinner вимагає від своєї моделі опису тексту для відображення,
а також описи попереднього і наступного варіантів.
JList теж вимагає від своєї моделі опису тексту для відображення
як варіантів вибору і кількості існуючих варіантів.
JTable потрібно набагато більше - він вимагає від своєї моделі
опису кількості існуючих рядків і стовпців, назв стовпців, класу
кожного стовпця і тексту для відображення в кожному осередку.
JTree вимагає від своєї моделі опису кореневого вузла, предків і
дочірніх елементів для всього дерева.
МОДЕЛІ
Ви можете запитати, навіщо все це робити?
Навіщо знадобилося розділяти всю цю
функціональність?
Уявіть собі сценарій: у вас є закінчена таблиця з
багатьма стовпцями даних, і ви використовуєте цю
таблицю на різних екранах.
Якщо ви несподівано вирішите видалити один зі
стовпців, що було б легше, змінити код в кожному
одиничному екземплярі JTable, використаному вами,
або змінити його в одному класі моделі, який ви
створили для використання з кожним примірником
JTable?
Очевидно, що краще змінити клас.
ПРИКЛАДИ МОДЕЛІ
Давайте розглянемо, як працює модель, на простому
прикладі JComboBox.
У попередньому розділі про JComboBox я показав вам, як
додавати елементи до даних, викликаючи setItem ().
Хоча це і прийнятно для простих демонстрацій, в реальних
додатках так роблять не часто.
Зрештою, коли є 25 варіантів, і вони постійно змінюються,
невже ви захочете проходити по ним в циклі, викликаючи
addItem () 25 разів?
Звичайно ж, ні.
JComboBox має метод setModel(), який приймає екземпляр
класу ComboBoxModel.
Ви повинні використовувати цей метод замість методу
addItem () для створення даних в JComboBox.
ПРИКЛАДИ МОДЕЛІ
Розглянемо приклад ModelTest
ПРИКЛАДИ МОДЕЛІ
Моделі є корисними можливостями Swing, оскільки
вони надають можливість повторного використання
коду і набагато більш легко працюють з даними.
Як це часто трапляється у великомасштабних
додатках, розробники серверної частини створюють і
витягають дані та передають їх UI-розробникам.
Обов'язком UI-розробника є працювати з даними і
відображати їх правильно, а моделі - інструменти, які
роблять це.
Подивимося пакет notepad
ДЯКУЮ ЗА УВАГУ!