Використання системи Swing в Java

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра САПР

Інформація про роботу

Рік:
2009
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Об’єктно-орієнтоване програмування

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра САПР    ЗВІТ До виконання лабораторної роботи №6 На тему: “ Використання системи Swing в Java” З курсу “ Об’єктно-орієнтоване програмування” МЕТА РОБОТИ Метою роботи є придбання навиків програмування графічних додатків Java з використанням системи Swing. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ 3.1. Основні компоненти Swing Компоненти Swing можна розділити на наступні типи: контейнери верхнього рівня (класи JWindow, JFrame, JDialog і JApplet); · спеціалізовані контейнери (класи JInternalFrame, JLayeredPane, JRootPane і JOptionPane); · спільноцільові контейнери (класи JPanel, JScrollPane, JSplitPane, JTabbedPane і JToolBar); · компоненти управління (класи JButton, JCheckBox, JRadioButton, JToggleButton, JComboBox, JList, JMenuBar, JMenu, JMenuItem, JCheckboxMenuItem, JRadioButtonMenuItem, JSeparator і JSlider); · нередаговані інформаційні компоненти (класи JLabel, JProgressBar і JToolTip); · редаговані інформаційні компоненти (класи JColorChooser, JFileChooser, JTable, JTree, JTextField, JPasswordField, JTextArea, JEditorPane і JTextPane). На відміну від компонентів AWT, компоненти системи Swing здатні працювати тільки по моделі делегування подій. 3.2. Контейнери верхнього рівня і спеціалізовані контейнери Так само, як і для AWT, для створення вікон графічних додатків використовується не клас JWindow, а клас JFrame (вікна, що створюються класом JWindow не містять найменування вікна і кнопок управління вікном). Додатки з графічним інтерфейсом використовує, принаймні, один фрейм. Аплети також можуть використовувати фрейми. · Для створення вікон, які залежать від іншого вікна (наприклад, зникають, коли згортається вікно, в якому вони використовуються) застосовуються діалогові вікна класу JDialog. · Аплети, що використовують компоненти Swing, повинні бути підкласами класу JApplet. · Будь-яка програма, яка використовує компоненти Swing, містить, принаймні, один контейнер верхнього рівня. Цей контейнер є коренем ієрархії контейнерів, що містять всі компоненти Swing. · Як правило, окремий графічний додаток має, принаймні, одну ієрархію контейнерів, в якій коренем є JFrame. Діалогове вікно або аплет також утворюють ієрархію контейнерів, коренем якої є JDialog або JApplet. Наприклад, якщо додаток містить одне головне вікно і два діалогові вікна, то вона містить три ієрархії контейнерів. 3.2.1. Коренева панель Кожен контейнер верхнього рівня базується на проміжному, прихованому, контейнері, званому кореневою панеллю (root pane). Коренева панель визначена в класі JRootPane. · Сама коренева панель звичайно не використовується, а використовуються її компоненти, які коренева панель (клас) надає фрейму (або іншому контейнеру верхнього рівня). Коренева панель містить наступні компоненти: шарувата панель (layered pane); · панель вмісту (content pane); · рядок меню (menu bar) - необов'язковий компонент; · скляна панель (glass bar). Єдиним обов'язковим контейнером верхнього рівня є панель вмісту. 3.2.2. Панель вмісту Панель вмісту містить всі компоненти Swing (кнопки, написи, текстові поля і т.д.). Оскільки для контейнерів верхнього рівня вміст вікна визначається за допомогою JRootPanel і повинно, на відміну від вікон AWT, визначатися уручну, для додавання компонент або установки менеджера компоновки використовуються не методи add() і setLayout(), а методи отримання і установки панелі вмісту: · public Container getContentPane() і public void setContentPane(Container contentPane) які визначені в класах JFrame, JDialog, JApplet і JInternalFrame. Так, додавання текстового поля у фрейм, діалогове вікно, аплет або внутрішній фрейм з установкою менеджера компоновки FlowLayout виглядає таким чином: · Container contentPane = getContentPane(); · JTextField inputField = new JTextField(15); · contentPane.setLayout(new FlowLayout()); · contentPane.add(inputField); · Слід зазначити, що для всіх контейнерів верхнього рівня (включаючи JApplet) менеджером компоновки за умовчанням є BorderLayout. · До контейнера верхнього рівня може бути додана рядок меню (menu bar). Рядок меню також розташовується усередині головного контейнера, але за межами панелі вмісту. 3.2.3.Клас JFrame Фрейм в Swing створюється за допомогою конструкторів · JFrame() або JFrame (String name) де name - ім'я фрейма. Для фрейма можна використовувати приведені вище методи отримання і установки кореневої панелі, шаруватої панелі, панелі вмісту, рядка меню і скляної панелі, причому повинно бути одержано, принаймні, значення панелі вмісту. · Іншою відмінністю JFrame від Frame є наявність у JFrame властивості, що визначає операцію закриття вікна за умовчанням. Для Frame за умовчанням нічого не відбувається, якщо робиться спроба закрити вікно, а JFrame ховається. Метод · public void setDefaultCloseOperation(int operation) класу JFrame дозволяє визначити три операції, які можуть виконуватися при закритті вікна JFrame: DO_NOTHING_ON_CLOSE - поводиться так само, як AWT Frame; · HIDE_ON_CLOSE - поведінка за умовчанням (для того, щоб вікно знову з'явилося на екрані, необхідно використовувати метод setVisible(true); · DISPOSE_ON_CLOSE - вікно закривається. 3.2.4. Діалогові вікна Діалогові вікна можна створювати або за допомогою класу JDialog, або використовуючи клас JOptionPane. · Основними конструкторами класу JDialog є: · JDialog(); · JDialog(Dialog owner) · JDialog(Dialog owner, boolean modal) · JDialog(Dialog owner, String title) · JDialog(Dialog owner, String title, boolean modal) · JDialog(Frame owner) · JDialog(Frame owner, boolean modal) · JDialog(Frame owner, String title) · JDialog(Frame owner, String title, boolean modal) · Перший конструктор створює немодальне діалогове вікно без імені. Параметри owner, title і modal в решті конструкторів задають відповідно батька даного діалогового вікна, ім'я вікна і вікна (true - модальне вікно або false - немодальне вікно). · Вікно класу JDialog має ті ж риси, що JFrame і пряме використання об'єктів класу JDialog аналогічно прямому використанню об'єкту JFrame. · Клас JOptionPane полегшує виведення стандартних діалогових або інформаційних вікон. · Для класу JOptionPane визначені наступні основні конструктори: · JOptionPane(); · JOptionPane(Object message, int messageType · int optionType, Icon icon Object[] options · Object initialValue); · Окрім цього визначені конструктори, що містять відповідно тільки перший параметр, тільки перші два параметри, тільки перші три параметри, тільки перші чотири параметри, тільки перші п'ять параметрів другого конструктора. · Всі використання цього класу звичайно зводяться до виклику одного з його методів: static int showConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon) - ставить питання на який потрібна відповідь типу Yes, No або Cancel. Існують також наступні три методи showConfirmDialog(): метод, що містить перші два параметри, метод, що містить перші чотири параметри і метод, що містить перші п'ять параметрів, приведені вище методи; · static Object showInputDialog(Component parentComponent, Object message, String title, int messageType, Icon icon Object[] selectionValues, Object initialValue) - дозволяє ввести деякий текст. Існують також наступні п'ять методів showInputDialog(): метод, що містить другий параметр, метод, що містить другий і сьомий параметри, метод, що містить перші два параметри, метод, що містить перший, другий і сьомий параметри, і метод, що містить перші три параметри і сьомий параметр; · static void showMessageDialog(Component parentComponent, Object message, String title, int messageType, Icon icon) - дозволяє вивести деяке повідомлення. Існують також наступні два методи showMessageDialog: метод, що містить перші два параметри і метод, що містить перші чотири параметри; · static int showOptionDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon Object[] options, Object initialValue) - об'єднує функції перерахованих вище діалогових вікон. Параметри в приведених конструкторах і методах мають наступний сенс: parentComponent - визначає компонент, що є батьком даного діалогового вікна (якщо цей параметр рівний null, як батько передбачається фрейм за умовчанням); · message - описове повідомлення, що поміщається в діалогове вікно (слід мати на увазі, що це об'єкт класу Object); · selectionValues - масив об'єктів, що розглядається як набір повідомлень; · icon - зображення, що виводиться в діалозі (значення за умовчанням визначається значенням параметра messageType); · messageType - визначає тип повідомлення. Допустимі наступні значення: ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE і PLAIN_MESSAGE; · optionType - визначає набір кнопок, які будуть виведені в нижній частині діалогового вікна: DEFAULT_OPTION, YES_NO_OPTION, YES_NO_CANCEL_OPTION і OK_CANCEL_OPTION · options - детальніший опис набору кнопок, які будуть виведені в нижній частині діалогового вікна (якщо заданий об'єкт класу Component, він прямо додається в нижню частину діалогового вікна, якщо об'єкт типу Icon, створюється кнопка класу JButton, для об'єктів інших класів проводиться перетворення об'єкту в рядок, який виводиться на кнопці класу JButton); · title - ім'я діалогового вікна; · initialValue - значення, що вводиться, за умовчанням. Для методів і допустимі наступні можливі значення значення, що повертається: YES_OPTION, NO_OPTION, CANCEL_OPTION, OK_OPTION і CLOSED_OPTION. 3.3. Спільноцільові контейнери 3.3.1. Клас JPanel Клас JPanel є варіантом класу Panel в AWT. Чотири конструктори класу: public JPanel() public JPanel(LayoutManager layout) public JPanel(boolean isDoubleBuffered) public JPanel(LayoutManager layout boolean isDoubleBuffered) забезпечують створення об'єкту JPanel відповідно під управлінням менеджера компоновки FlowLayout, під управлінням заданого менеджера компоновки, з вбудованою підтримкою подвійної буферизації і, нарешті, під управлінням заданого менеджера компоновки і з вбудованою підтримкою подвійної буферизації. Робота з об'єктами класу JPanel не відрізняється від роботи з об'єктами класу Panel. за винятком того, що панель додаються не у фрейм, а в панель вмісту фрейма. 3.3.2. Клас JTabbedPane Панель з вкладками (tabbed pane) введена в Swing замість того, що використалося в AWT менеджера CardLayout, тобто менеджер компоновки CardLayout в Swing не реалізований. Кожна вкладка має заголовок. Коли користувач вибирає вкладку, її вміст стає видимим. Тільки одна з вкладок може бути вибрана одночасно. Панель з вкладками звичайно використовується для установки параметрів конфігурації. Панель з вкладками реалізована класом JTabbedPane, який має наступні конструктори JTabbedPane() JTabbedPane(int tabPlacement) JTabbedPane(int tabPlacement, int tabLayoutPolicy) Перший конструктор створює нову панель з вкладками, в якій заголовки вкладок розташовані зверху, а другий дозволяє визначити розташування заголовків вкладок (JTabbedPane.TOP - зверху, JTabbedPane.BOTTOM - знизу, JTabbedPane.RIGHT - управо або JTabbedPane.LEFT - вліво). Третій конструктор додатково задає правило розташування вкладок (JTabbedPane.WRAP_TAB_LAYOUT - вкладки розташовуються в декілька рядів, якщо вони не поміщаються в одному ряду - значення за умовчанням і JTabbedPane.SCROLL_TAB_LAYOUT - вкладки прокручуються, якщо вони не поміщаються в одному ряду). Формування в програмі панелі з вкладками виконується за допомогою наступної процедури: 1. Створити об'єкт JTabbedPane. 2. Для додавання кожної вкладки в панель викликати один з методів addTab(): public void addTab(String title, Icon icon Component component, String tip) public void addTab(String title, Icon icon Component component) public void addTab(String title, Component component) Аргументи цих методів визначають заголовок вкладки title, компоненту component, який вона містить, зображення icon і спливаючу підказку tip. 3. Додати панель з вкладками в панель змісту вікна. Для відстежування вибору тієї або іншої вкладки використовується блок прослуховування ChangeListener, який додається або віддаляється за допомогою методів public void addChangeListener(ChangeListener l) і public void removeChangeListener(ChangeListener l) класу JTabbedPane. У інтерфейсі ChangeListener визначений єдиний метод public void stateChanged(ChangeEvent e) у якому за допомогою методів public Component getSelectedComponent() або public int getSelectedIndex() класу JTabbedPane можна одержати вибраний компонент або індекс вибраного компоненту. 3.3.3. Клас JSplitPane Розщеплені панелі (клас JSplitPane) використовуються для розділення панелі, що виводиться, на дві компоненти. Конструктори класу public JSplitPane() public JSplitPane(int newOrientation) public JSplitPane(int newOrientation boolean newContinuousLayout) public JSplitPane(int newOrientation Component newLeftComponent, Component newRightComponent) public JSplitPane(int newOrientation boolean newContinuousLayout, Component newLeftComponent Component newRightComponent) задають в параметрі newOrientation вирівнювання зліва направо з використанням константи JSplitPane.HORIZONTAL_SPLIT або зверху вниз з використанням константи JSplitPane.VERTICAL_SPLIT, у параметрі newContinuousLayout безперервне перемальовування компонент при переміщенні роздільника (значення true) або перемальовування компонент після закінчення переміщення роздільника (значення false), а в параметрах newLeftComponent і newRightComponent - компоненти розщепленої панелі. Положення роздільника в панелі задається за допомогою методу public void setDividerLocation(int location) який задає в пікселях позицію x або у роздільника (залежно від вертикальної або горизонтальної орієнтації панелей). Метод public void setOneTouchExpandable(boolean newValue) дозволяє задати на розділовій смузі кнопки (із стрілками) для швидкого згортання і розгортання однієї з панелей розщепленої панелі. 3.4. Значки, написи і кнопки 3.4.1. Інтерфейс Icon і клас ImageIcon Значки (icons) реалізуються в Swing за допомогою інтерфейсу Icon (насправді вони не є компонентами і їх можна використовувати практично зі всіма компонентами Swing). Реалізацією інтерфейсу Icon, що створює значок із зображення, є клас ImageIcon. Двома основними конструкторами цього класу є: ImageIcon(String filename) ImageIcon(URL url) Перша форма використовує зображення у файлі з ім'ям filename (використовується в графічних додатках) а друга форма - в ресурсі, розташованому по URL-адресі url (використовується в аплетах Swing) На відміну від класу Image, в класі ImageIcon зображення завантажується заздалегідь з використанням методів класу MediaTracker. Для створення власних зображень можна безпосередньо реалізовувати інтерфейс Icon. 3.4.2. Клас JLabel Написи Swing є об'єктами класу JLabel. Цей об'єкт може відображати тексти і/або значки. Основними його конструкторами є: JLabel(Icon image) JLabel(String text) JLabel (String text, Icon image, int horizontalAlignment) У цих конструкторах text і image - текст і значок, використовуваний в написі. Параметр horizontalAlignment визначає вирівнювання і має значення LEFT, RIGHT або CENTER. Ці константи визначені в інтерфейсі SwingConstants, разом з декількома іншими, використовуваними класами системи Swing. Значок і текст, пов'язаний з написом, можна прочитувати і записувати наступними методами: public Icon getIcon(); public String getText(); public void setIcon(Icon image); public void setText(String text); 3.4.3. Клас AbstractButton Кнопки Swing є підкласами класу AbstractButton. Цей клас містить багато методів, які дозволяють управляти поведінкою кнопок, прапорців і перемикачів. Наприклад, можна визначати різні значки для відображення компоненту, коли він віджатий (disabled), натиснутий (pressed), або вибраний (selected). Деякий значок можна використовувати як значок "наїзду" (rollover), який відображається, коли курсор миші встановлений поверх цього компоненту ("наїхав" на нього). Нижче приведені описи методів, які управляють цією поведінкою: public void setDisabledIcon(Icon image) public void setPressedIcon (Icon image) public void setSelectedIcon(Icon image) public void setRolloverIcon(Icon image) Текст, пов'язаний з кнопкою, можна читати і записувати за допомогою наступних методів: public String getText() public void setText(String text) У класі AbstractButton визначені також методи public int getMnemonic() і public void setMnemonic(int mnemonic) відповідно для отримання і установки ЀгарячихЀ клавіш. Як параметр при установці ЀгарячоїЀ клавіші задається воно із статичних властивостей класу KeyEvent. Ці властивості мають загальне ім'я VK_XXX, де XXX - ім'я однієї з клавіш, наприклад VK_D. При натисненні кнопки конкретні підкласи AbstractButton генерують події Action. Блоки прослуховування реєструють і відміняють реєстрацію для цих подій за допомогою наступних методів: void addActionListener(ActionListener l) void removeActionListener(ActionListener l) 3.4.4. Клас JButton Клас JButton є підкласом класу AbstractButton і забезпечує функціональні можливості кнопки. Цей клас дозволяє пов'язати з кнопкою зображення, текст або і те і інше. Деякі з його конструкторів: JButton(Icon image) JButton(String text) JButton(String text, Icon image) Тут text і image - напис і зображення, використовувані для кнопки. Клас JButton успадковує властивості інтерфейсу SwingConstants, а також властивості і методи класу AbstractButton. 3.5. Прапорці і перемикачі Клас JCheckBox, який забезпечує функціональні можливості прапорця, є конкретною реалізацією класу AbstractButton. деякі з його конструкторів: JCheckBox(Icon image) JCheckBox(Icon image, boolean state) JCheckBox(String text) JCheckBox(String text, boolean state) JCheckBox (String text, Icon image) JCheckBox(String text, Icon image, boolean state) У цих конструкторах використовуються наступні параметри: image - зображення для прапорця, text - напис. Якщо state має значення true, то прапорець спочатку вибраний. Стан прапорця може бути змінений за допомогою методу void public void setSelected(boolean b) а отримати багатство прапорця можна за допомогою методу public boolean isSelected(). Перемикачі підтримуються класом JRadioButton , який також є конкретною реалізацією класу AbstractButton. Нижче приведені деякі з його конструкторів: JRadioButton(Icon image) JRadioButton(Icon image, boolean state) JRadioButton(String text) JRadioButton(String text, boolean state) JRadioButton(String text, Icon image) JRadioButton(String text, Icon image, boolean state) де параметри мають той же сенс, що і для класу JCheckBox. Перемикачі повинні бути об'єднані в групу, де в кожен момент може бути вибраний тільки один елемент. Наприклад, якщо користувач клацає по перемикачу, який знаходиться в групі, будь-який заздалегідь натиснутий перемикач в цій групі автоматично скидається. Щоб створити групу кнопок, створюється об'єкт класу ButtonGroup. Для цієї мети використовується єдиний конструктор класу public ButtonGroup(). Елементи до групи перемикачів додаються за допомогою методу public void add(AbstractButton а) а кількість перемикачів в групі можна одержати за допомогою методу public int getButtonCount(). Батьківським класом і для JCheckBox і для JRadioButton є клас JToggleButton, який не має еквівалента в AWT. Він поводиться як об'єкт класу Button, який після натиснення на нього залишається в натиснутому стані. 3.6. Списки 3.6.1. Клас JComboBox Замість класу Choice в AWT, в системі Swing забезпечує комбіноване поле (combo box) - комбінація текстового поля і списку, що розкривається (клас JComboBox). Комбіноване поле звичайно відображає один вхід (елемент) списку. Проте воно може також відображати і список, що розкривається, який дає можливість користувачу вибирати різні елементи. Ви також можете ввести з клавіатури своє значення елементу списку в текстове поле. Два найпоширеніші конструктори: JComboBox() JComboBox(Object [] items) дозволяють створити порожній список з вибором або задати масив об'єктів даного списку. Елементи додаються до списку вибору за допомогою методу void addItem(Object obj) де obj - об'єкт, який буде доданий до комбінованого поля. Решта методів клас аналогічна відповідним методам класу Choice, проте додані методи public void setEditable(boolean aFlag) і public boolean isEditable(), що дозволяють встановити можливість введення значення в список і перевірити прапорець можливості введення свого значення в список. Для обробки подій, пов'язаних з комбінованим списком, можна використовувати або блоки прослуховування ItemListener, або блоки прослуховування ActionListener, описані раніше для компонент AWT. 3.6.2. Клас JList Аналогом класу List в Swing є клас JList. Два найпоширеніші конструктори цього класу JList() JList(Object [] items) дозволяють задати або порожній список, або список, що містить задані об'єкти (оберніть уваги, що елементами списків в Swing можуть бути не тільки рядки, але довільні об'єкти). не виконується в JList автоматично, а виконується за допомогою приміщення списку в об'єкт класу JScrollPane. Набір методів в класі JList істотно розширений в порівнянні з класом List (так, наприклад, є можливість задавати колір тексту і фону для виділених елементів) і, крім того, замість інтерфейсу ItemListener для списків JList використовується інтерфейс ListSelectionListener, блок прослуховування якого додається і віддаляється за допомогою методів public void addListSelectionListener(ListSelectionListener listener) і public void removeListSelectionListener( ListSelectionListener listener) класу JList. Метод public void valueChanged(ListSelectionEvent e) інтерфейсу обробляє події, пов'язані з вибором елементів списку, а метод public Object[] getSelectedValues() класу JList дозволяє одержати список вибраних об'єктів. 3.7. Текстові компоненти 3.7.1. Клас JTextComponent Батьківським класом текстових компонент в Swing є клас JTextComponent. Він забезпечує функціональні можливості, які є загальними для всіх текстових компонент. Можливості компоненту JTextComponent бібліотеки Swing набагато перевершують вимоги, що пред'являються до звичайного текстового поля або напису. Даний компонент надає розробникам великий набір методів роботи з текстом, наприклад: public void сміттю() - копіювати в буфер обміну; · public void cut() - вирізувати в буфер обміну; · public void paste() - вставити з буфера обміну; · public String getSelectedText() - одержати виділений текст; · public int getSelectionStart() - визначити крапку почала виділеного тексту; · public int getSelectionEnd() - визначити точку кінця виділеного тексту; · public String getText() - ввести текст з поля; · public void setText(String text) - помістити текст в полі; · public void setEditable(boolean b) - вирішити редагування; · public void setCaretPosition(int position) - помістити курсор у вказану позицію. 3.7.2. Класи JTextField, JPasswordField і JTextArea Підкласи класу JTextComponent - JTextField і JTextArea практично аналогічні класам TextField і TextArea пакету AWT. Між ними існують лише наступні відмінності: рядки введення паролів задаються в Swing за допомогою окремого класу JPasswordField (конструктори цього класу аналогічні конструкторам класу JTextField, метод public char[] getPassword() дозволяє набути значення введеного пароля, а методи public void setEchoChar(char з) і public char getEchoChar() - встановити і набути значення символу луни); прокрутка об'єкту класу JTextArea (так само, як і об'єкту класу JList) виконується за допомогою приміщення списку в об'єкт класу JScrollPane. 3.8. Меню Компоненти JMenuBar, JMenu, JMenuItem і JCheckBoxMenuItem в Swing по своїх функціональних можливостях і використанні аналогічні компонентам MenuBar, Menu, MenuItem і CheckboxMenuItem, використовуваним в AWT. Новий компонент JRadioButtonMenuItem дозволяє організувати в меню перемикачі. Група альтернативних перемикачів формується таким чином: спочатку створюється об'єкт класу ButtonGroup, а потім в цей об'єкт за допомогою методу add() додаються об'єкти класу JRadioButtonMenuItem. Класи, що реалізовують меню в Swing, відрізняються від відповідних класів AWT наступними основними особливостями: оскільки всі класи, окрім JMenuBar, є підкласами класу JAbsractButton, для меню і пунктів меню можна задавати не тільки текст, але і зображення (для цього в конструктори цих класів введений параметр Icon image і додані методи, пов'язані із зображеннями); рядок меню встановлюється за допомогою методу public void setJMenuBar(JMenuBar menubar) класу JFrame; доданий інтерфейс MenuListener для обробки подій пов'язаних з меню (об'єктами класу JMenu). Методи цього інтерфейсу public void menuSelected(MenuEvent e) public void menuDeselected(MenuEvent e) public void menuCanceled(MenuEvent e) дозволяють обробляти події, пов'язані з вибором меню, відміною вибору меню і відміною меню. Блоки прослуховування для меню додаються і віддаляються за допомогою методів public void addMenuListener(MenuListener l) і public void removeMenuListener(MenuListener l); мнемонічні клавіші (гарячі клавіші) для меню і пунктів меню на відміну від AWT діють тільки тоді, коли відповідні меню або пункти меню виведені на екрані. Для того, щоб клавіші діяли незалежно від того, чи видно відповідний елемент меню на екрані, необхідно задати такі клавіші за допомогою методу public void setAccelerator(KeyStroke keyStroke); для пунктів меню введений інтерфейс MenuDragMouseListener, методи якого public void menuDragMouseEntered(MenuDragMouseEvent e) public void menuDragMouseExited(MenuDragMouseEvent e) public void menuDragMouseDragged(MenuDragMouseEvent e) public void menuDragMouseReleased(MenuDragMouseEvent e) дозволяють організувати обробку подій, пов'язаних з переміщенням курсора миші над пунктами меню (наприклад, зміни виду пункту меню при наведенні на нього курсора миші). Блоки прослуховування для меню додаються і віддаляються за допомогою методів public void addMenuDragMouseListener( MenuDragMouseListener l) і public void removeMenuDragMouseListener( MenuDragMouseListener l); окрім цього, для пунктів меню введений інтерфейс MenuKeyListener, методи якого public void menuKeyTyped(MenuKeyEvent e) public void menuKeyPressed(MenuKeyEvent e) public void menuKeyReleased(MenuKeyEvent e) дозволяє організувати обробку подій, пов'язаних з натисненням і відпуском, а також окремо з натисненням і окремо з відпуском клавіш, пов'язаних з пунктами меню. 3.9. Бігунки і підказки 3.9.1. Класи JScrollBar і JSlider Смуга прокрутки (клас JScrollBar) в Swing практично не відрізняється від смуги прокрутки (клас Scrollbar) в AWT. Бігунки реалізуються в Swing за допомогою класу JSlider. Цей компонент, як і JScrollBar, дозволяє вибрати значення за допомогою переміщення бігунка. Основними конструкторами класу JSlider є JSlider() JSlider(int orientation) JSlider(int min, int max) JSlider(int min, int max, int value) JSlider(int orientation, int min, int max, int value) де параметр orientation задає орієнтацію, а параметри min, max і value відповідно мінімальне, максимальне і поточне значення бігунка. Для бігунків можна задати лінійки з ризиками великої або маленької висоти з використанням методів public void setMajorTickSpacing(int n) і public void setMinorTickSpacing(int n) де параметр n задає відстань між ризиками в пікселях. Для відстежування подій бігунка використовується інтерфейс ChangeListener, описаний вище для індикатора. 3.9.2. Клас JToolTip Спливаючі підказки (текст, що з'являється, якщо навести на деякий час покажчик миші на який-небудь об'єкт) реалізуються в Swing за допомогою класу JToolTip. Об'єкт цього класу створюється за допомогою конструктора JToolTip(). Прикріпити підказки до компоненту і одержати компонент, до якого прикріплена дана підказка, можна за допомогою методів void setComponent(JComponent comp) і JComponent getComponent(), а установка і отримання тексту підказки виконується за допомогою методів void setTipText(String tipText) і String getTipText(). Методи класу JComponent public void setToolTipText(String text) і public String getToolTipText() дозволяють встановити і одержати підказку безпосередньо для будь-якого графічного компоненту. 3.10. Оформлення рамок Кожен стандартний графічний компонент в Java міститься в прямокутній області на екрані із сторонами, паралельними сторонам екрану. Для деяких графічних компонент сторони цього прямокутника виділяються якимсь чином. Так, наприклад, сторони кнопки класу JButton намальовані так, що створюють враження її опуклості. При натисненні кнопки миші на ній графічне оформлення сторін кнопки JButton міняється, створюючи враження її вдавленності. Бібліотека Swing дозволяє змінити оформлення меж будь-якого компоненту, у тому числі і контейнера за допомогою рамок різного вигляду. Найзагальніші характеристики всіх рамок описані інтерфейсом Border з пакету javax.swing.border. Викреслювання рамки виконується методом public void paintBorder(Component з, Graphics g int x, int у, int width, int height); Тут задається компонент з, який обводиться рамкою, екземпляр g класу Graphics, володіючого методами малювання, і розміри рамки, які звичайно співпадають з розмірами компоненту, або трохи більше або трохи менше за них. Рамка може бути прозорою або непрозорою. Це наголошується логічним методом public boolean isBorderOpaque(). Третій і останній метод інтерфейсу public Insets getBorderInsets(Component з) повертає простір, зайнятий рамкою даного компоненту з, у вигляді екземпляра класу Insets. У класі Insets цей простір визначається завтовшки рамки зверху top, зліва left, справа right і знизу bottom. Всі чотири поля класу Insets є цілочисельними змінними. який можна використовувати для визначення розмірів самого компоненту без рамки. Клас AbstractBorder розширюють близько двадцяти класів, що викреслюють найрізноманітніші рамки. Для зручності роботи з ними в пакеті javax.swing є клас BorderFactory, в якому зібрані статичні методи виду createXxxBorder() для різних типів рамок з різними параметрами. Найчастіше для створення рамки досить скористатися одним з цих методів, а потім встановити одержану рамку в компонент методом public void setBorder(Border border) класу JComponent, наприклад: JLabel myLabel = new JLabel( "Напис з товстою синьою рамкою"); myLabel.setBorder(BorderFactory.createLineBorder( Color.blue, 3)); Нижче приведені основні статичні методи класу BorderFactory для створення рамок різних типів: метод public static Border createEmptyBorder() створює порожню рамку з нульовими розмірами, а статичний метод public static Border createEmptyBorder (int top, int left, int bottom, int right) - порожню рамку із заданими розмірами; методи public static Border createLineBorder(Color color) і public static Border createLineBorder(Color color, int thickness) створюють відповідно рамку із заданим кольором і рамку із заданим кольором заданої товщини; метод public static Border createBevelBorder(int type) створює рамку заданого типа type (опуклого - BevelBorder.RAISED або увігнутого - BevelBorder.LOWERED), метод public static Border createBevelBorder(int type, Color highlight, Color shadow) створює рамку заданого типа із заданим світлим (highlight) і темним (shadow) кольором, а метод public static Border createBevelBorder(int type, Color highlightOuter, Color highlightInner, Color shadowOuter, Color shadowInner) створює об'ємну двобарвну рамку заданого типа (внутрішні лінії мають кольори highlightInner і shadowInner, а зовнішні - кольори highlightOuter і shadowOuter); метод public static Border createEtchedBorder() створює стандартну врізану рамку з кольорами трохи світліше і трохи темніше за колір фону, метод public static Border createEtchedBorder(int type) створює врізану рамку (якщо type рівний EtchedBorder.RAISED) або що втиснула (якщо type рівний EtchedBorder.LOWERED), метод public static Border createEtchedBorder(Color highlight, Color shadow) задає кольори Ѐврізаної рамкиЀ, а метод public static Border createEtchedBorder(int type, Color highlight, Color shadow) об'єднує можливості двох попередніх методів; рамка одного кольору, але з ліній різної товщини задається за допомогою методу public static MatteBorder createMatteBorder(int top, int left, int bottom, int right, Color color), де color - колір рамки, top, left, bottom і right - товщина рамки (у пікселях) відповідно зверху, зліва, знизу і справа, а метод public static MatteBorder createMatteBorder(int top, int left, int bottom, int right, Icon tileIcon) задає як рамку зображення tileIcon, що повторюється; метод public static TitledBorder createTitledBorder(Border border, String title, int titleJustification, int titlePosition, Font titleFont, Color titleColor) задає для рамки border напис title шрифтом titleFont і кольори titleColor, вирівняну по горизонталі відповідно до значення titleJustification (одна із статичних констант класу TitledBorder: LEFT, CENTER, RIGHT, LEADING, TRAILING або DEFAULT_JUSTIFICATION - значення LEADING) і по вертикалі відповідності із значенням titlePosition (одна із статичних констант класу TitledBorder: ABOVE_TOP, TOP BELOW_TOP, ABOVE_BOTTOM, BOTTOM BELOW_BOTTOM або DEFAULT_POSITION - значення TOP). Решту п'яти методів createTitledBorder() містять окремі параметри або частину параметрів приведеного вище методу; метод public static CompoundBorder createCompoundBorder(Border outsideBorder, Border insideBorder) використовується для створення рамки, що складається з двох вкладених рамок будь-яких типів. Хоча бібліотека Swing надає безліч готових рамок і клас BorderFactory для їх швидкого створення, часто виникає необхідність сконструювати оригінальну рамку. Для її створення можна розширити абстрактний клас AbstractBorder, визначивши хоч би один конструктор, і перевизначивши методи paintBorder() і getBorderInsets(). Якщо рамка непрозора, то треба перевизначити метод isBorderOpaque() так, щоб він повертав true. Свою рамку можна створити, розширивши який-небудь клас рамок, наприклад, для рамки, що розширює клас TitledBorder, в заголовок можна вставити не напис, а компонент класу JComponent. Індивідуальне завдання При натисненні однієї з кнопок: "Більше" або "Менше" в графічному вікні замальованого прямокутник стрибкоподібно збільшує свої розміри до певної межі або також стрибкоподібно зменшує свої розміри до первинного розміру. Колір зафарбовування задається за допомогою списку, що розкривається. Кожен елемент списку повинен містити маленький квадратик відповідного кольору. Кнопки повинні бути поміщені в рамку з написом "Зміна розміру". Код програми import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; public class lab6 extends JFrame { static int RectWidth=50,RectHeight=50; static Color col; ImageIcon labelBlack = new ImageIcon("E:\\Main user\\Java\\lab6\\IconBlack.gif"); ImageIcon labelRed = new ImageIcon("E:\\Main user\\Java\\lab6\\IconRed.gif"); ImageIcon labelGreen = new ImageIcon("E:\\Main user\\Java\\lab6\\IconGreen.gif"); ImageIcon labelBlue = new ImageIcon("E:\\Main user\\Java\\lab6\\IconBlue.gif"); JLabel tmplabel = new JLabel(); JLabel lastlabel = new JLabel(); JButton bigger = new JButton("Більше"); JButton smaller = new JButton("Менше"); JComboBox ColorList = new JComboBox(); Graphics g; public lab6(String name) { setTitle(name); setDefaultCloseOperation(DISPOSE_ON_CLOSE); setLayout(new BorderLayout()); setSize(500,500); setLocation(0,0); tmplabel.setBorder(BorderFactory.createTitledBorder("Зміна Розміру")); tmplabel.setSize(492,50); add(tmplabel); bigger.addActionListener ( new ActionListener() { public void actionPerformed(ActionEvent e) { if(RectWidth<=250) { RectWidth+=25; RectHeight+=25; repaint(); } } } ); bigger.setSize(200,30);
Антиботан аватар за замовчуванням

31.03.2013 00:03-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!