Professional Documents
Culture Documents
Л10 11сем3 ТДО
Л10 11сем3 ТДО
Кнопки-перемикачі
У попередньому прикладі прапорці можуть встановлюватися незалежно один від
іншого. Але часто потрібно вибрати тільки один із запропонованих варіантів. Таку
групу прапорців часто називають групою кнопок-перемикачів - при натисканні
однієї з таких кнопок раніше натиснута кнопка повертається в початковий стан.
Бібліотека Swing дозволяє легко реалізувати групи кнопок-перемикачів. Для цього
потрібно створити по одному об'єкту типу ButtonGroup на кожну групу. Потім в
групу кнопок-перемикачів слід ввести об'єкти типу JRadioButton.
Приклад в книзі «Хорстманн. Java. Бібліотека професіонала, том 1.
Основи. 10-е видання », стор 587.(corejava10.zip\corejava\v1ch12\radioButton)
Програма з групою кнопок-перемикачів. Користувач може вибрати розмір шрифту -
Small, Medium, Large і Extra large.
ButtonGroup group = new ButtonGroup();
JRadioButton smallButton = new JRadioButton("Small", false);
group.add(smallButton);
JRadioButton mediumButton = new JRadioButton("Medium", true);
group.add(mediumButton);
…
Комбіновані списки
Якщо варіантів вибору занадто багато, то слід скористатися списком, що
розкривається. Якщо користувач клацне на цьому компоненті, розкриється список,
з якого він може вибрати один з елементів.
Якщо список, що розкривається, є редагованим, то обраний з нього елемент
можна поправити як в звичайному тестовому поле. Редагований список, що
розкривається, об'єднує властивості текстового поля і можливості вибору та
називається комбінованим. Компоненти комбінованих списків створюються
засобами класу JComboBox. Починаючи
з версії Java SE 7, клас JComboBox є
узагальненим: комбінований список типу
JComboBox<String> складається з
строкових об'єктів типу String, а
комбінований список типу
JComboBox<Integer> - з цілочисельних
значень.
Щоб зробити список, що розкривається
редагованим (комбінованим), слід
викликати метод setEditable(). Зміни
вносяться тільки в поточний елемент
списку. Перелік варіантів вибору
залишається колишнім.
Обраний варіант в вихідному або відредагованому вигляді можна отримати за
допомогою методу getSelectedItem().
Якщо списку не редагований, то для отримання обраного варіанту потрібного типу
краще зробити наступний виклик:
combo.getItemAt(combo.getSelectedlndex())
Приклад в книзі «Хорстманн. Java. Бібліотека професіонала, том 1.
Основи. 10-е видання », стор 595 (corejava10.zip\corejava\v1ch12\comboBox)
У прикладі у користувача є можливість вибрати стиль шрифту із заданого списку.
JComboBox <String> faceCombo = new JComboBox<>();
faceCombo.addltem("Serif");
faceCombo.addltem("SansSerif");.
Коли користувач вибирає потрібний варіант з комбінованого списку, цей компонент
ініціює подію. В обробнику події, щоб визначити варіант, обраний зі списку, слід
викликати метод getSource() з даною подією в якості параметра. Цей метод
повертає посилання на список, який є джерелом події. Потім слід викликати метод
getSelectedltem (), який повертає варіант, обраний зі списку.
НА ЗАМІТКУ! Щоб показати звичайний список, елементи якого постійно
відображалися на екрані скористайтесь компонентом JList.
Регульовані повзунки
Комбіновані списки дають можливість робити вибір з дискретного ряду варіантів. А
регульовані повзунки дозволяють вибрати конкретне значення в заданих межах,
наприклад, будь-яке число в межах від 1 до 100. Створення повзунка:
JSlider slider = new JSlider(min, max, initialValue) ;.
Коли користувач переміщує повзунок, обиране значення в компоненті змінюється в
межах від мінімального до максимального. Приймачі подій від регульованого
повзунка отримують подія типу ChangeEvent.
Щоб отримувати повідомлення при переміщенні повзунка, слід створити і
зареєструвати об'єкт класу, що реалізовує інтерфейс ChangeListener. В
інтерфейсі оголошена функція stateChanged(ChangeEvent e). Для реєстрації
викликати метод addChangeListener().
Приклад «Хорстманн. Java. Бібліотека професіонала, том 1. Основи. 10-е
видання », стор 599.( corejava10.zip\corejava\v1ch12\slider) Регульовані повзунки
різних видів
5.5. Меню
У бібліотеці Swing передбачені спадаючі меню. Рядок меню у верхній частині вікна
містить назви спадаючих меню. Клацаючи на такому імені кнопкою миші,
користувач відкриває меню, що складається з пунктів і підміню. Якщо користувач
клацне на пункті меню, все меню закриються і програмою буде відправлено
відповідне повідомлення.
Створення меню
Створюється меню наступним чином:
JMenuBar menuBar = new JMenuBar();
Рядок меню - це звичайний компонент, який
можна розташувати де завгодно. Як правило,
вона розташовується у верхній частині фрейма
за допомогою методу setJMenuBar():
frame.setJMenuBar(menuBar);
Для кожного меню створюється свій об'єкт в такий спосіб:
JMenu editMenu = new JMenu("Edit");
Меню верхнього рівня розміщуються до рядка меню:
menuBar.add(editMenu);
Потім в об'єкт меню вводяться пункти, роздільники і підміню:
JMenuItem pasteltem = new JMenuItem ( "Paste");
editMenu.add(pasteltem);
editMenu.addSeparator();
JMenu optionsMenu = ...; // підміню
editMenu.add(optionsMenu);
Для кожного пункту меню слід визначити обробник:
ActionListener listener = ...;
pasteltem.addActionListener(listener);
Є зручний метод JMenu.add(String s), що дозволяє додавати новий пункт в кінці
меню. Цей метод повертає створений пункт меню, для якого можна легко задати
обробник:
JMenuItem pasteltem = editMenu.add("Paste");
pasteltem.addActionListener(listener);
Пункти меню часто зв'язуються з командами (об'єктами типу Action), які можуть
активізувати інші елементи призначеного для користувача інтерфейсу (кнопки,
комбінації клавіш). Визначається клас, який реалізує інтерфейс Action. Зазвичай
він розширює клас AbstractAction. У конструкторі AbstractAction вказується мітка
пункту меню і перевизначається метод actionPerformed(), що дозволяє
реалізувати обробку події, пов'язаного з цим пунктом меню.
// "Exit" -пункт меню
Action exitAction = new AbstractAction("Exit") {
public void actionPerformed(ActionEvent event) {
// код виконуваного дії
System.exit(0);
}
};
Потім об'єкт типу Action вводиться в меню наступним чином:
JMenuItem exitltem = fileMenu.add(exitAction);
У підсумку новий пункт вводиться в меню по імені дії. Об'єкт цієї дії стає
оброблювачем. Такий прийом дозволяє замінити такі рядки коду:
JMenuItem exitltem = new JMenuItem(exitAction);
fileMenu.add(exitltem);
Піктограми в пунктах меню
Як і екранні кнопки, меню можуть мати текстову мітку, піктограму або і те й інше.
Піктограму можна вказати в конструкторі JMenuItem, або задати за допомогою
методу setlcon(), або пов'язати з дією.
Пункти меню з прапорцями і кнопками-перемикачами
Пункти меню можуть також містити прапорці або кнопки-перемикачі. Коли
користувач клацає кнопкою миші на пункті меню, прапорець автоматично
встановлюється або скидається, а стан кнопки-перемикача змінюється відповідно
до обраного пунктом. Створення пункту меню з прапорцем:
JCheckBoxMenuItem readonlyltem =
new JCheckBoxMenuItem("Read-only");
optionsMenu.add(readonlyltem);
Для введення в меню кнопок-перемикачів в меню слід додати групу кнопок-
перемикачів. Вибирається одна з таких кнопок, інші відключаються.
ButtonGroup group = new ButtonGroup();
JRadioButtonMenuItem insertltem =
new JRadioButtonMenuItem ( "Insert");
insertltem.setSelected(true);
JRadioButtonMenuItem overtypeltem =
new JRadioButtonMenuItem ( "Overtype");
group.add(insertltem);
group.add(overtypeltem);
optionsMenu.add(insertltem);
optionsMenu.add(overtypeltem);
Спливаючі меню
Спливаючі або контекстні меню не пов'язані з рядком меню а з'являються в
довільно обраному місці на екрані.
Спливаюче меню створюється так само, як і
звичайне меню, за винятком того, що у нього
відсутній заголовок.
JPopupMenu popup = new JPopupMenu();
Пункти додаються як зазвичай:
JMenuItem item = new
JMenuItem(Cut");
item.addActionListener(listener);
popup.add(item);
Спливаюче меню слід явним чином виводити на екран за допомогою методу
show(). При виклику цього методу (в обробнику події) задається батьківський
компонент і розташування спливаючого меню в його системі координат:
popup.show(panel, х, у);
Спливаюче меню відображається на екрані, коли користувач клацає на спеціально
призначеній для цього кнопці. Як правило, права кнопка миші.
Для спливання меню після клацання кнопкою миші викликається наступний метод:
component.setComponentPopupMenu(popup);
Щоб похідний компонент успадковував меню батьківського компонента, досить
зробити наступний виклик:
child.setlnheritsPopupMenu(true);
Клавіші швидкого доступу та оперативні клавіші
Пункти меню зручно вибирати за допомогою клавіш швидкого доступу. Зв'язати
пункт меню з клавішею швидкого доступу можна, задавши цю клавішу в
конструкторі:
JMenuItem aboutltem = new JMenuItem("About",'A');
Буква, відповідна клавіші швидкого доступу, виділяється підкресленням. Тепер для
вибору пункту меню користувачеві досить натиснути клавішу <А>.
Маючи в розпорядженні об'єкт типу Action, можна призначити клавішу швидкого
доступу наступним чином:
cutAction.putValue(Action.MNEMONIC_KEY, new Integer('A'));
Щоб зв'язати якусь клавішу з меню в цілому,
слід викликати метод setMnemonic():
JMenu helpMenu = new JMenu("Help");
helpMenu.setMnemonic('H');
Тепер, щоб зробити вибір з рядка меню, досить
натиснути клавішу <Alt> разом з клавішею
призначеної літери: щоб вибрати меню Help,
слід натиснути комбінацію клавіш <Alt+H>.
Клавіші швидкого доступу дозволяють
вибрати пункт в уже відкритому меню.
Оперативні клавіші дозволяють вибрати
пункт, не відкриваючи меню. У багатьох
прикладних програмах передбачені комбінації
клавіш <Ctrl+O> і <Ctrl+S> для пунктів Open і
Save меню File. Для зв'язування оперативних
клавіш з пунктом меню служить метод
setAccelerator(), якому в якості параметра
передається об'єкт типу Keystroke.
openltem.setAccelerator(Keystroke.getKeyStroke("Ctrl О"));
Оперативні клавіші не відкривають меню, а тільки ініціюють подія, пов'язану із
зазначеним пунктом меню.
Якщо оперативні клавіші призначені для пункту меню, то відповідна комбінація
клавіш автоматично відображається в меню.
Відображення або приховування доступу до пунктів меню
Іноді деякі пункти меню повинні вибиратися лише в певному контексті. Так, якщо
документ відкритий лише для читання, то пункт меню Save не має сенсу. Тому
треба тимчасово заборонити доступ до деяких пунктів меню. Заборонений пункт
меню зазвичай виділений світло-сірим кольором як недоступний.
З метою дозволити або заборонити доступ до пунктів меню викликається метод
setEnabled():
saveltem.setEnabled(false);
Приклад «Хорстманн. Java. Бібліотека професіонала, том 1. Основи. 10-е
видання », стор 613. (corejava10.zip\corejava\v1ch12\menu) У прикладі
демонструються вкладені меню, недоступні пункти меню, прапорці та кнопки-
перемикачі в пунктах меню, а також клавіші швидкого доступу і оперативні клавіші
вибору пунктів меню.
Панелі інструментів
Панель інструментів являє собою ряд кнопок,
що забезпечують швидкий доступ до найбільш
часто використовуваних команд. Панель
інструментів відрізняється тим, що її можна
перетягувати на будь-яку з чотирьох сторін
фрейма.
Панель інструментів може бути навіть
відокремленою від фрейма. Тоді вона міститься
у власному фрейму.
НА ЗАМІТКУ! Перетягування панелі інструментів
можливо тільки разі розміщення в контейнері з
диспетчером компонування, що підтримує
розташування компонентів в північній, південній,
східній і західній областях фрейма.