JMenu/JMenuItem/JMenuBar




JLabel

Самым основным компонентом в библиотеке Swing является JLabel. Он делает именно то, чего вы от него ожидаете: располагается в нужном месте, улучшает вид приложения и описывает другие компоненты. На приведенном ниже изображении показан JLabel в действии:

 

 

К основным методам относится установка текста, изображения, выравнивания и других компонентов, которые описывает метка:

get/setText(): Получить/установить текст в метке.

get/setIcon(): Получить/установить изображение в метке.

get/setHorizontalAlignment(): Получить/установить горизонтальную позицию текста.

get/setVerticalAlignment(): Получить/установить вертикальную позицию текста.

get/setDisplayedMnemonic(): Получить/установить мнемонику (подчеркнутый символ) для метки.

get/setLabelFor(): Получить/установить компонент, к которому присоединена данная метка; когда пользователь нажимает комбинацию клавиш Alt+мнемоника, фокус перемещается на указанный компонент.

JButton

Основным активным компонентом в Swing является JButton, кнопка, которую вы видите (с надписями OK и Cancel) в каждом окне. JButton в действии выглядит следующим образом:

 

Методы, используемые для изменения свойств JButton, аналогичны методам JLabel. Они управляют текстом, изображениями и ориентацией:

get/setText(): Получить/установить текст в кнопке.

get/setIcon(): Получить/установить изображение в кнопке.

get/setHorizontalAlignment(): Получить/установить горизонтальную позицию текста.

get/setVerticalAlignment(): Получить/установить вертикальную позицию текста.

get/setDisplayedMnenomic(): Получить/установить мнемонику (подчеркнутый символ), которая в комбинации с кнопкой Alt вызывает нажатие кнопки.

Кроме этих методов существуют различные состояния кнопки. Состояние - это свойство, описывающее компонент, обычно имеющее значение true/false. В случае с JButton он имеет следующие возможные состояния: активная/неактивная, выбранная/не выбранная, мышка сверху/мышки нет, нажата/отжата. Кроме того, вы можете комбинировать состояния, например: кнопка может быть выбрана и над ней находится мышка. Использование различных изображений для каждого состояния является популярным и очень эффективным способом отображать действия пользователей. Методами состояния для JButton являются:

get/setDisabledIcon()

get/setDisabledSelectedIcon()

get/setIcon()

get/setPressedIcon()

get/setRolloverIcon()

get/setRolloverSelectedIcon()

get/setSelectedIcon()

 

JTextField

Основным текстовым компонентом в Swing является JTextField; он позволяет пользователям вводить текст в UI. Например его можно использовать при вводе имени пользователя и пароля. Вы вводите, удаляете, выделяете текст, перемещаете курсор - Swing заботится обо всем, что вы делаете. Как UI-разработчику вам действительно не нужно делать много для того, чтобы использовать возможности JTextField.

 

Основной метод JTextField - метод, устанавливающий текст: get/setText(). Этот метод получает/устанавливает текст внутри JTextField.

 

JFrame

Класс JFrame является контейнером, позволяющим добавлять к себе другие компоненты для их организации и предоставления пользователю. Он имеет много других бонусов.

 

Некоторыми из методов, которые вы можете вызвать с JFrame для изменения его свойств, являются:

get/setTitle(): Получить/установить заголовок фрейма.

get/setState(): Получить/установить состояние фрейма (минимизировать, максимизировать и т.д.).

is/setVisible(): Получить/установить видимость фрейма, другими словами, отображение на экране.

get/setLocation(): Получить/установить месторасположение в окне, где фрейм должен появиться.

get/setSize(): Получить/установить размер фрейма.

add(): Добавить компоненты к фрейму.

 

Простое приложение

На приведенном ниже рисунке показан завершенный пример:

 

 

Первым вашим действием является создание класса. Swing-приложение, которое размещает компоненты в JFrame, должно быть подклассом класса JFrame, например так:public class HelloWorld extends JFrame

Сделав так, вы получаете все свойства JFrame, описанные выше, и, что самое важное, поддержку окна в OS. Следующий шаг - размещение компонентов на экране. В данном примере мы используем схему null. Более подробно о схемах и менеджерах схем вы узнаете позже. Для этого примера числа указывают позицию в JFrame в пикселях: public HelloWorld()

{

super();

this.setSize(300, 200);

this.getContentPane().setLayout(null);

this.add(getJLabel(), null);

this.add(getJTextField(), null);

this.add(getJButton(), null);

this.setTitle("HelloWorld");

}

 

private javax.swing.JLabel getJLabel() {

if(jLabel == null) {

jLabel = new javax.swing.JLabel();

jLabel.setBounds(34, 49, 53, 18);

jLabel.setText("Name:");

}

return jLabel;

}

 

private javax.swing.JTextField getJTextField() {

if(jTextField == null) {

jTextField = new javax.swing.JTextField();

jTextField.setBounds(96, 49, 160, 20);

}

return jTextField;

}

 

private javax.swing.JButton getJButton() {

if(jButton == null) {

jButton = new javax.swing.JButton();

jButton.setBounds(103, 110, 71, 27);

jButton.setText("OK");

}

return jButton;

}

 

Теперь, когда компоненты размещены в JFrame, необходимо, чтобы JFrame показался на экране; также нужно сделать ваше приложение запускаемым. Как и во всех Java-приложениях, вы должны добавить метод main, для того чтобы сделать Swing-приложение запускаемым. Внутри этого метода main необходимо создать объект вашего приложения HelloWorld и вызвать setVisible(): public static void main(String[] args)

{

HelloWorld w = new HelloWorld();

w.setVisible(true);

}

 

JComboBox

Комбинированный список является знакомым ниспадающим списком элементов, в котором пользователи могут либо выбрать ноль или один (и только один) элемент из списка. В некоторых версиях комбинированного списка вы можете ввести ваш собственный вариант. Хорошим примером является адресная строка вашего браузера; это комбинированный список, позволяющий ввести собственный вариант. Вот как выглядит JComboBox в Swing:

 

Важными функциями JComboBox являются функции, работающие с содержащимися в нем данными. Вы можете использовать следующие методы JComboBox:

addItem(): Добавить элемент к JComboBox.

get/setSelectedIndex(): Получить/установить индекс выбранного элемента в JComboBox.

get/setSelectedItem(): Получить/установить выбранный объект.

removeAllItems(): Удалить все объекты из JComboBox.

remoteItem(): Удалить конкретный объект из JComboBox.

 

JPasswordField

Разновидностью JTextField является JPasswordField, который позволяет скрывать все символы, отображаемые на экране в текстовом поле.

Дополнительные "защищенные" методы JPasswordField незначительно меняют свое поведение по сравнению с JTextField, для того чтобы вы не смогли прочитать текст:

get/setEchoChar(): Получить/установить символ, который появляется в JPasswordField при вводе текста. При получении пароля символ "echo" не возвращается; вместо него возвращается реальный символ.

getText(): Вы не должны использовать эту функцию, поскольку она имеет некоторые проблемы с защитой (для интересующихся - String хранится в оперативной памяти, и возможный дамп кучи может открыть пароль).

getPassword(): Это корректный метод для получения пароля из JPasswordField, поскольку возвращает массив char[], содержащий пароль. Для гарантирования нормальной защищенности массив должен быть очищен в 0, для того чтобы он не оставался в оперативной памяти.

 

JCheckBox/JRadioButton

Компоненты JCheckBox и JRadioButton предоставляют пользователю варианты для выбора, обычно в многовариантном формате. В чем отличия? С практической точки зрения они одинаковы. Их поведение одинаково. Однако в обычной UI-практике они имеют небольшое различие. JRadioButton обычно группируются вместе для предоставления пользователю вопроса с принудительным ответом (ответы взаимоисключающие - может быть только один ответ на вопрос).

Классом, который позволяет группировать вместе компоненты JCheckBox или JRadioButton, является класс ButtonGroup. Он позволяет группировать варианты таким образом, что при выборе одного, с другого отметка автоматически снимается.

Вот как JCheckBox и JRadioButton выглядят в Swing:

 

Важными методами ButtonGroup, которые стоит запомнить, являются:

add(): Добавить JCheckBox или JRadioButton к ButtonGroup.

getElements(): Получить все компоненты в ButtonGroup, для того чтобы можно было выполнить итерацию по ним для поиска выбранного.

JMenu/JMenuItem/JMenuBar

Компоненты JMenu, JMenuItem и JMenuBar являются главными строительными блоками для разработки системы меню в вашем JFrame. Основой любой системы меню является JMenuBar. Для присоединения JMenuBar к JFrame используется метод setJMenuBar(). После его закрепления в JFrame вы можете добавлять все меню, подменю и элементы меню, какие хотите.

JMenuItem также поддерживает сокращенные клавиатурные команды. Как и большинство приложений, которые вы используете, Swing-приложения позволяют нажать Ctrl+(клавиша) для активизации действия, аналогично нажатию соответствующего элемента меню. Вспомните Ctrl+X и Ctrl+V, которые вы используете для копирования и вставки.

Кроме того, JMenu и JMenuItem поддерживают мнемоники. Вы можете использовать клавишу Alt вместе с буквой, назначенной меню в качестве мнемоники (например, нажатие Alt+F, а затем Alt+x закрывает приложение в Windows).

Вот как выглядят JMenuBar с компонентами JMenu и JMenuItem в Swing:

Важными методами, которые вам нужны в этих классах, являются:

JMenuItem и JMenu:

get/setAccelerator(): Получить/установить комбинацию Ctrl+клавиша, используемую в качестве клавиатурного сокращения.

get/setText(): Получить/установить текст для меню.

get/setIcon(): Получить/установить изображение, используемое в меню.

 

Только JMenu:

add(): Добавить еще один JMenu или JMenuItem к JMenu (создание вложенного меню).

 

JSlider

Компонент JSlider используется в приложении для изменения числового значения. Это быстрый и простой способ позволить пользователям визуально получить ответную реакцию не только на их текущий выбор, но увидеть диапазон допустимых значений.

В Swing JSlider выглядит следующим образом:

 

Важными методами в JSlider являются:

get/setMinimum(): Получить/установить минимальное значение, которое вы можете выбрать.

get/setMaximum(): Получить/установить максимальное значение, которое вы можете выбрать.

get/setOrientation(): Получить/установить ориентацию JSlider (вверх/вниз или вправо/влево).

get/setValue(): Получить/установить начальное значение JSlider.

 

JSpinner

Во многом аналогично JSlider вы можете использовать JSpinner, для того чтобы позволить пользователям выбирать целочисленное значение. Одним важным преимуществом является его компактный размер по сравнению с JSlider. Хотя недостатком является то, что вы не можете легко установить его границы.

Кроме выбора чисел он может быть использован для выбора дат, имен, цветов, чего-угодно. Это делает JSpinner чрезвычайно мощным, позволяя вам предоставлять компонент, содержащий только предопределенные варианты. В этом он аналогичен JComboBox, хотя их использование не должно быть взаимозаменяемо.

JSpinner выглядит так:

 

Важными методами являются:

get/setValue(): Получить/установить начальное значение JSpinner, которое в базовом случае должно быть целым числом.

getNextValue(): Получить следующее значение, которое будет выбрано после нажатия клавиши управления курсором "стрелка вверх".

getPreviousValue(): Получить предыдущее значение, которое будет выбрано после нажатия клавиши управления курсором "стрелка вниз".

 

JToolBar

Компонент JToolBar выступает как палитра для других компонентов (JButtons, JComboBoxes и т.д.), которые совместно образуют панели инструментов, встречающиеся в большинстве приложений. Панели инструментов позволяют программе размещать часто используемые команды в удобном месте и группировать их. JToolBar также предлагает еще одну функцию, которую вы встречали в других панелях инструментов: способность "перемещаться" (то есть, становится отдельным фреймом над главным фреймом).

Ниже показан не перемещающийся JToolBar:

 

 

Важным методом JToolBar является is/setFloatable(), который получает/устанавливает свойство: может ли JToolBar перемещаться.

 

JToolTip

JToolTip - это небольшие "подсказки", которые всплывают тогда, когда вы наводите и держите курсор мышки над чем-нибудь. Они могут быть очень полезны в приложениях, предоставляя подсказки для элементов, детализируя информацию или даже показывая полный текст элемента в сжатых UI. Они активизируются в Swing, если оставить курсор мышки над компонентом на определенное количество времени; обычно они появляются примерно через секунду после остановки мышки и остаются видимыми до тех пор, пока курсор остается над компонентом.

Метод setToolTip() является методом класса JComponent, то есть, каждый Swing-компонент может иметь всплывающую подсказку, связанную с ним. Хотя JToolTip и сам является Swing-классом, он, фактически, не предоставляет в настоящее время дополнительной функциональности и не должен создаваться. Вы можете обратиться к нему и использовать, вызывая функцию setToolTip() в JComponent.

Вот как выглядит JToolTip:

 

JOptionPane

Swing предоставляет базовый, но полезный класс для предоставления UI-разработчикам способа выдачи и получения простых сообщений.

 

Вот внешний вид JOptionPane:

 

Определенного рода хитростью при работе с JOptionPane являются все его возможные варианты, которые вы можете использовать. Компонент позволяет менять практически каждый свой аспект: заголовок фрейма, само сообщение, отображаемую пиктограмму, варианты кнопок и необходимость текстового ответа.

 

JTextArea

Компонент JTextArea развивает JTextField. В то время как JTextField ограничен одной строкой текста, JTextArea позволяет иметь несколько строк. JTextArea имеет многие из функций, присутствующих в JTextField. Однако JTextArea предлагает несколько дополнительных функций. К ним относятся способность переносить слова (то есть, переносить длинное слово в следующую строку вместо обрезания по середине слова) и способность переносить текст (то есть, помещать длинные строки текста на следующую строку вместо создания очень длинной строки, требующей наличия горизонтальной полосы прокрутки).

JTextArea в Swing выглядит так:

Важными методами для разрешения переноса строки и переноса слова являются:

is/setLineWrap(): Устанавливает, должна ли переноситься строка, если она становится слишком длинной.

is/setWrapStyleWord(): Устанавливает, должно ли переноситься слово на следующую строку, если оно слишком длинное.

 

JList

Компонент JList является полезным компонентом для предоставления пользователю многих вариантов для выбора. Вы можете представлять его как расширение JComboBox. JList предоставляет больше вариантов и добавляет возможность выбора нескольких вариантов. Выбор между JList и JComboBox часто заключается в следующем: если вам требуется возможность множественного выбора или имеется более 15 вариантов (хотя это число не является общим правилом), вы должны всегда выбирать JList.

Вы должны использовать JList совместно с JScrollPane, как было показано выше, поскольку он может предоставлять больше вариантов, чем помещается в видимой области.

JList имеет также модель выбора (также имеющуюся в JTable), которую вы можете установить в различные типы выбора вариантов. Такими типами являются: одиночный выбор (вы можете выбрать только один вариант), одиночный интервал (вы можете выбрать смежные варианты, но в любом их количестве) и множественный интервал (вы можете выбрать любое число вариантов в любых комбинациях).

 

JList в Swing выглядит так:

 

Существует много функций в JList для работы с данными, и, как я уже сказал, это только немногие из тех, которые потребуются для вашей работы с JList. Вот основные методы:

get/setSelectedIndex(): Получить/установить выбранную строку списка; в случае со списками с множественным выбором возвращается int[].

get/setSelectionMode(): Как объяснялось ранее, получить/установить режим выбора в одиночный выбор, одиночный интервал или множественный интервал.

setListData(): Установить данные для использования в JList.

get/setSelectedValue(): Получить выбранный объект (как противоположность выбранному номеру строки).

 

 

JTable

 

Представляйте себе электронную таблицу Excel при рассмотрении компонента JTable, и вы получите ясную картину того, что делает в Swing компонент JTable. Он имеет много таких же характеристик: ячейки, строки, столбцы, перемещение столбцов и скрытие столбцов. JTable развивает идею JList. Вместо отображения данных в одном столбце он отображает их в нескольких. Многие концепции JList присутствуют также и в JTable, в том числе, например, множественный выбор интервалов. Но однострочные концепции JList меняются на ячеистую структуру JTable. Это означает, что есть различные способы делать этот выбор в JTable: в виде столбцов, строк или индивидуальных ячеек.

 

В Swing JTable выглядит так:

 

JTree

JTree наследует свою функциональность из концепции дерева с ветвями и листьями. Система файлов и каталогов - это один из примеров, как в Internet Explorer, и JTree является наилучшим компонентом для данных с иерархической структурой, иными словами, когда данные имеют форму дерева.

 

В Swing компонент JTree выглядит так:

 

Концепции Swing

 

Схемы, модели и события

 

Схемы (layout): Swing содержит множество схем, которые представляют собой классы, управляющие размещением компонентов в приложении и тем, что должно произойти с ними при изменении размеров окна приложения или при удалении или добавлении компонентов.

События (event): Вы должны реагировать на нажатия клавиши, нажатия кнопки мыши и на все остальное, что пользователь может сделать в UI.

Модели (model) - это самый эффективный способ работы с данными. Они удаляют большую часть работы по обработке данных из самого компонента (вспомните обсуждение MVC) и предоставляют оболочку для общих объектных классов данных (например, Vector и ArrayList).

 

Простые схемы

 

Как уже говорилось в предыдущем разделе, схема управляет расположением компонентов в приложении. Менеджеры схем берут все это на себя. Никто не использует одни и те же настройки, поэтому менеджеры схем создают "относительные" схемы, позволяя вам указывать, как должно происходить изменение размеров относительно других размещенных компонентов. Вы просто вызываете setLayout(yourLayout) для настройки менеджера схемы. Последующие вызовы add() добавляют компонент в контейнер и позволяют менеджеру схемы позаботиться об их размещении.

В Swing включено много схем. Такими схемами являются FlowLayout, GridLayout и BorderLayout.

В схеме FlowLayout компоненты располагаются слева направо. Когда пространство заканчивается, происходит переход на новую строку. Это самая простая в использовании схема и наименее мощная: setLayout(new FlowLayout());

add(new JButton("Button1"));

add(new JButton("Button2"));

add(new JButton("Button3"));

 

Схема GridLayout позволяет указать количество строк и столбцов, а затем располагает компоненты в этих ячейках по мере их добавления: setLayout(new GridLayout(1,2));

add(new JButton("Button1"));

add(new JButton("Button2"));

add(new JButton("Button3"));

 

Схема BorderLayout. В ней используются понятия North (север), South (юг), East (восток), West (запад) и Center (центр) для размещения компонентов на экране: setLayout(new BorderLayout());

add(new JButton("Button1"), "North");

add(new JButton("Button2"), "Center");

add(new JButton("Button3"), "West");

 

GridBagLayout

В то время как приведенные выше примеры хороши для простых схем, более продвинутые UI требуют использования более сложного менеджера схемы. Вот здесь нужен GridBagLayout.

 

События

 

Swing обрабатывает события, используя модель событие/прослушиватель. Эта модель работает путем разрешения некоторым классам регистрироваться на события от компонента. Такой класс называется прослушивателем (listener), поскольку он ждет возникновения событий в компоненте и выполняет действия при их возникновении. Компонент сам знает, как "активировать" событие (то есть, он знает типы взаимодействий, которые может генерировать, и как дать прослушивателям знать, когда происходят эти взаимодействия). Он передает это взаимодействие при помощи событий (event), классов, содержащих информацию о взаимодействии.

Простейший пример - кнопка JButton и вывод сообщений "Hello" на консоль при ее нажатии.

JButton знает, когда на нее нажимают; это обрабатывается внутри компонента, код для обработки этого не нужен. Однако прослушиватель должен зарегистрироваться для получения этого события от JButton, для того чтобы вы могли вывести сообщение "Hello". Класс listener делает это, реализуя интерфейс listener и вызывая метод addActionListener() компонента JButton: // Создать JButton

JButton b = new JButton("Button");

// Зарегистрировать прослушиватель

b.addActionListener(new HelloListener());

 

class HelloListener implements ActionListener

{

// Метод интерфейса для получения нажатий кнопки

public void actionPerformed(ActionEvent e)

{

System.out.println("Hello");

}

}

Компонент JList работает аналогично. Когда кто-то выбирает что-то в JList, вы выводите на консоли сообщение о выбранном объекте: // myList - это JList, заполненный данными

myList.addListSelectionListener(new ListSelectionListener()

{

public void valueChanged(ListSelectionEvent e)

{

Object o = myList.getSelectedItem();

System.out.println(o.toString());

}

}

);

 

Из тих двух примеров вы должны понять, как работает в Swing модель событие/прослушиватель. Фактически, каждое взаимодействие в Swing обрабатывается таким способом.

 

1.4 Варианты индивидуальных заданий

Варианты индивидуальных заданий назначает преподаватель.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: