рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Менеджеры компоновок

Менеджеры компоновок - раздел Программирование, Введение в Java Применение Компоновок   При Проектировании Интерфейса ...

Применение компоновок

 

При проектировании интерфейса пользователя с использованием языка Java компоненты размещаются в контейнерах. Самым простым примером контейнера может служить окно формы (класс Frame). В общем случае любой класс, наследуемый от класса контейнера java.awt.Container, является контейнером.

 

В языке Java для "плавающего" размещения компонентов, зависящего от размеров окна и размеров самих компонентов, введены классы компоновок.

 

Компоновка определяет порядок расположения компонентов на экране. Перед отображением объектов-контейнеров, содержащих другие компоненты, вызывается менеджер компоновки. Он располагает компоненты на экране в соответствующем порядке. Используемый менеджер компоновки указывается вызовом метода setLayout. Если менеджер компоновки не указан явно, то выбирается тот, что используется по умолчанию для данного класса контейнера.

 

Для того чтобы отключить использование менеджеров компоновки и перейти к явному указанию координат, следует вызвать метод setLayuot(null).

 

Пакеты java.awt и javax.swing предоставляют следующие классы менеджеров компоновки:

java.awt.FlowLayout - создает последовательное размещение объектов с указанным выравниванием и заданными между этими объектами интервалами.

java.awt.GridLayout - создает табличное размещение объектов с заданным числом строк и столбцов, объекты располагаются последовательно слева направо.

java.awt.GridBagLayout - создает гибкое табличное размещение объектов, позволяя размещать один компонент в нескольких ячейках.

java.awt.BorderLayout - создает размещение объектов по краю контейнера (вверху, внизу, слева, справа и в центре).

java.awt.CardLayout - создает компоновку контейнера, отображая одновременно только один компонент. Как правило, в качестве компонент для данного менеджера компоновки выступают панели.

javax.swing.ScrollPaneLayout - позволяет размещать компоненты на девяти различных областях; является компоновкой по умолчанию для класса ScrollPane.

javax.swing.ViewportLayout - является компоновкой по умолчанию для класса Jviewport.

javax.swing.BoxLayout - является компоновкой по умолчанию для класса Box.

javax.swing.OverlayLayout - позволяет размещать компоненты один над другим.

 

Для использования конкретного менеджера компоновки следует создать объект данного класса и установить созданную компоновку для данного контейнера, а затем добавить в контейнер другие компоненты.

 

Например:

GridBagLayout gridBagLayout1 = new GridBagLayout();

this.setLayout(gridBagLayout1);

Button button1 = new Button();

button1.setLabel("Кнопка 1");

this.add(button1,

new GridBagConstraints(0, 0, 3, 1, 0.0, 0.0,

GridBagConstraints.CENTER,

GridBagConstraints.NONE,

new Insets(0, 0, 0, 0),

315, 0));

 

 

Метод setLayout следует квалифицировать именем контейнера, для которого устанавливается компоновка. Для класса контейнера, в котором выполняется данный метод, можно использовать ссылку this. В случае предварительного создания объекта "менеджер компоновки", его следует указать как параметр метода setLayout. В противном случае в качестве параметра метода setLayout следует указать оператор создания анонимного объекта "менеджер компоновки".

 

Например:

this.setLayout(gridLayout1);

// или

this.setLayout(new GridLayout());

 

При использовании панели типа Panel методы объекта "менеджер компоновки" вызываются стандартным образом имя_объекта_менеджер_компоновки.имя_метода.

 

Например:

 

cardLayout1.show(Panel1,"Panel0");.

 

При использовании панели типа JPanel методы объекта "менеджер компоновки" вызываются с использованием метода getLayout.

 

Например:

 

((CardLayout)jPanel2.getLayout()).show(jPanel2,"jPanel0");

Классы компоновок

Класс BorderLayout

 

Менеджер компоновки BorderLayout разбивает контейнер на пять областей и располагает добавляемые в контейнер объекты по краям (север, юг, запад, восток) и в центре.

 

Каждая область указывается соответствующей константой: NORTH, SOUTH, EAST, WEST и CENTER. Если в методе add отсутствует строка, указывающая расположение компонента, то по умолчанию используется значение CENTER.

На рисунке приведен внешний вид, реализуемый менеджером компоновки BorderLayout для пяти кнопок, которые расположены в контейнере - апплете.

 

Следующий код иллюстрирует использование компоновки BorderLayout:

import java.applet.Applet;

import java.awt.*;

public class MyApplet extends Applet {

public MyApplet() {

try { jbInit();}

catch(Exception e) { } }

public static void main(String[] args) {

MyApplet myApplet1 = new MyApplet(); }

private void jbInit() throws Exception {

setLayout(new BorderLayout());

add(new Button("North"), BorderLayout.NORTH);

add(new Button("South"), BorderLayout.SOUTH);

add(new Button("East"), BorderLayout.EAST);

add(new Button("West"), BorderLayout.WEST);

add(new Button("Center"), BorderLayout.CENTER);

}

}

 

 

Класс BorderLayout предоставляет ряд методов, включая следующие:

GetHgap - возвращает расстояние в пикселях между компонентами по горизонтали.

SetHgap - устанавливает расстояние в пикселях между компонентами по горизонтали.

GetVgap - возвращает расстояние в пикселях между компонентами по вертикали.

SetVgap - устанавливает расстояние в пикселях между компонентами по вертикали.

Класс CardLayout

 

Класс CardLayout определяет менеджер компоновки для контейнера, который может содержать несколько страниц ("карт") и для которого одновременно может быть видна только одна карта.

 

Класс CardLayout предоставляет ряд методов, включая следующие:

GetHgap- определяет отступ по горизонтали.

GetVgap - определяет отступ по вертикали.

First - активизирует первую страницу контейнера.

Last - активизирует последнюю страницу контейнера.

Next - активизирует следующую страницу контейнера в циклическом порядке (после последней карты активизируется первая карта).

Previous - активизирует предыдущую страницу контейнера в циклическом порядке.

Show - активизирует компонент указанного контейнера.

 

Например:

// Для контейнера типа JPanel

void jButton1_actionPerformed(ActionEvent e) {

((CardLayout)jPanel1.getLayout()).next(jPanel1);

}

// Для контейнера типа Panel

void button1_actionPerformed(ActionEvent e) {

cardLayout1.next(panel1);

}

 

Класс FlowLayout

 

Менеджер компоновки FlowLayout размещает добавляемые в контейнер компоненты последовательно слева направо. Компоненты могут быть размещены в нескольких последовательных рядах.

 

На рисунке приведены два результата применения этой компоновки при изменении размеров контейнера.

 

Класс FlowLayout предоставляет следующие константы, определяющие выравнивание компонентов:

CENTER - по центру.

LEFT - по левому краю.

RIGHT - по правому краю.

 

Класс FlowLayout предоставляет ряд методов, включая следующие:

SetAlignment - устанавливает выравнивание компонентов для данной компоновки. Параметр метода может принимать следующие значения: FlowLayout.LEFT, FlowLayout.RIGHT и FlowLayout.CENTER.

GetHgap - определяет расстояние между компонентами по горизонтали.

SetHgap - устанавливает расстояние между компонентами по горизонтали.

GetVgap - определяет расстояние между компонентами по вертикали.

SetVgap- устанавливает расстояние между компонентами по вертикали.

Класс GridLayout

 

Этот класс позволяет размещать компоненты в контейнере в виде таблицы. В каждой ячейке таблицы может быть размещен только один компонент.

 

Размер всех ячеек таблицы одинаков. Количество строк и столбцов таблицы определяется или в конструкторе, или вызовом методов setColumns и setRows. При этом, если эти значения не равны нулю, то количество столбцов является величиной вычисляемой и зависит от общего числа компонентов, добавленных на компоновку, и указанного числа строк. И только в том случае, если количество строк задано равным нулю, заданное количество столбцов будет учитываться менеджером компоновки.

 

На рисунке приведены примеры использования компоновки GridLayout.

 

Для компоновки GridLayout следует определять или количество строк, или количество столбцов.

 

Например:

this.setLayout(gridLayout1);

gridLayout1.setRows(3);

Класс GridBagLayout

 

Этот класс используется менеджером компоновки GridBagLayout и определяет требования к размещению компонентов.

 

Компоновка GridBagLayout позволяет размещать компоненты в ячейках таблицы. Но, в отличие от менеджера компоновки GridLayout, ячейки таблицы могут различаться как по ширине, так и по высоте. Размещаемые компоненты могут занимать несколько ячеек.

 

Область, занимаемая компонентом, называется областью отображения. Ее размеры определяются значениями переменных gridwidth и gridheight (количество ячеек по горизонтали и по вертикали) класса GridBagConstraints.

 

Отступами (insets) называется расстояние между областью отображения и действительной областью, занимаемой компонентом.

 

На рисунке приведен пример компоновки, в которой кнопка 3 занимает 9 ячеек, но размер кнопки меньше размера области отображения.

 

Если область отображения отличается от размера компонента, то для определения требований к размещению используется переменная fill.

 

Если размер размещаемого компонента меньше размера области отображения, то для указания размещения компонента используется переменная anchor, которая может принимать одно из следующих значений:

GridBagConstraints.CENTER

GridBagConstraints.NORTH

GridBagConstraints.NORTHEAST

GridBagConstraints.EAST

GridBagConstraints.SOUTHEAST

GridBagConstraints.SOUTH

GridBagConstraints.SOUTHWEST

GridBagConstraints.WEST

GridBagConstraints.NORTHWEST.

 

Переменная fill класса GridBagConstraint определяет, следует ли изменять размер компонента, и может принимать следующие значения:

GridBagConstraint.NONE - размер компонента не изменять (значение, используемое по умолчанию);

GridBagConstraint.HORIZONTAL - изменить размер по горизонтали, но не изменять его высоту;

GridBagConstraint.VERTICAL - изменить размер по вертикали, но не изменять его ширину;

GridBagConstraint.BOTH - увеличить размеры компонента до размера области отображения.

 

Переменные gridheight и gridwidthкласса GridBagConstraint определяют число ячеек в столбце или строке соответственно. При этом константа GridBagConstraints.REMAINDER указывает, что компонент будет последним в столбце (строке), а константа GridBagConstraints.RELATIVE указывает, что компонент будет ближайшим к последнему.

 

Конструктор GridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady) создает объект требований к размещению компонента, используемый менеджером компоновки, со всеми полями, имеющими заданные значения.

Компоненты графического интерфейса пользователя

Панели

 

Java-приложение создается как иерархия вложенных компонентов. Наверху этой иерархии могут находится компоненты классов Frame, JFrame, Applet или JApplet.

 

Классы панелей используются как контейнеры для размещения других компонентов, в числе которых могут быть и сами панели. Пакет оконного интерфейса java.awt содержит один класс панели - Panel. Для добавления компонентов на панель класса Panel следует выполнить метод add, квалифицировав его именем панели.

 

Пакет облегченных swing-компонентов предоставляет несколько классов панелей, включая следующие классы:

JRootPane

JPanel

JTabbedPane

JScrollPane

JSplitPane

JOptionPane

JToolbar.

 

При использовании менеджеров компоновки с панелями из пакета java.swing для получения ссылки на панель следует использовать метод getLayout.

 

Например:

 

((CardLayout)jPanel1.getLayout()).next(jPanel1);

 

Пакет javax.swing содержит интерфейс RootPaneContainer, реализуемый классами JApplet, JFrame, JInternalFrame, JWindow и JDialog.

 

При добавлении компонентов в контейнер, использующий интерфейс RootPaneContainer , метод add надо квалифицировать следующим образом:

 

frame.getContentPane().add(child).

 

Класс JRootPane используется всеми панелями пакета javax.swing. Он позволяет размещать содержимое панели на нескольких уровнях. JRootPane представляет четыре уровня:

ContentPane - используется для отображения компонентов.

MenuBar - необязательный уровень, на котором можно размещать компоненты меню.

LayeredPane - используется для управления contentPane и menuBar.

GlassPane - самый ближайший к пользователю уровень. По умолчанию он невидим. glassPane, как правило, используется для отображения графики или каких-либо всплывающих компонентов. Компоненты этого уровня перекрывают компоненты, расположенные на более "низких" уровнях.

 

Уровень contentPane должен быть родительским для размещения любого компонента. Для доступа к данному уровню используется метод getContentPane().

 

Уровень glassPane является самым верхним. Для доступа к данному уровню применяется метод getGlassPane(). Чтобы в приложении можно было использовать уровень glassPane, для него следует вызвать метод setGlassPane().

 

Например:

 

panel1.getContentPane().add(button1);

 

Компонент JTabbedPane реализует набор страниц, переключаемых по щелчку пользователя на вкладках. Вкладки добавляются методами addTab и insertTab. Вкладки нумеруются, начиная с 0.

 

Если количество вкладок равно нулю, то индекс текущей вкладки равен -1.

 

На рисунке показан внешний вид окна, содержащего панель вкладок класса JTabbedPane.

 

Класс javax.swing.JScrollPane реализует компонент "прокручиваемая область".

 

Панель JScrollPane состоит из:

области просмотра ( viewport) типа JViewport. Для добавления рамки вокруг области просмотра следует использовать метод setViewportBorder, а для добавления рамки вокруг всей прокручиваемой области - метод setBorder.;

вертикальной и горизонтальной области прокрутки типа JScrollBar (необязательная область);

области заголовков строк и области заголовкоd столбцов (необязательная область). Эти области реализуются как объекты типа JViewport, для которых вызваны методы setRowHeaderView и setColumnHeaderView;

четырех угловых областей. По умолчанию угловые области не содерджaт компонентов. Для того чтобы разместить в угловой области компонент, следует использовать метод setCorner.

 

Чтобы изменить свойство области просмотра, ее следует получить, вызвав метод getViewport. Например, для задания цвета фона нужно записать:

 

scrollPane.getViewport().setBackground(Color.red).

 

На рисунке показано расположение основных частей прокручиваемой области JScrollPane.

 

Контейнером для разделяемых панелей служит компонент JSplitPane. Разделяемые плавающие панели имеют одну общую сторону - по вертикали или по горизонтали.

 

Следующий пример иллюстрирует создание окна, в котором применяются разделяемые панели:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Frame1 extends JPanel {

JSplitPane jSplitPane1 = new JSplitPane(); // Класс

// разделяемых панелей

JScrollPane jScrollPane1 = new JScrollPane();

JScrollPane jScrollPane2 = new JScrollPane();

JTextPane jTextPane1 = new JTextPane();

JTextPane jTextPane2 = new JTextPane();

public Frame1() { try { jbInit(); }

catch(Exception e) { } }

public static void main(String s[]) {

JFrame frame = new JFrame("Панели");

frame.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0); } });

frame.setContentPane(new Frame1());

frame.pack();

frame.setVisible(true);

}

private void jbInit() throws Exception {

// Определение ориентации разделяемых панелей

jSplitPane1.setOrientation(JSplitPane.VERTICAL_SPLIT);

// Размещение левого и правого компонента

// на разделяемой панели

jSplitPane1.setLeftComponent(jScrollPane1);

jSplitPane1.setRightComponent(jScrollPane2);

// Отображение кнопок сворачивания и разворачивания

// сторон разделяемой панели

jSplitPane1.setOneTouchExpandable(true);

// Задание размера панелей

jScrollPane1.setPreferredSize(new Dimension(300, 60));

jScrollPane2.setPreferredSize(new Dimension(300, 60));

// Добавление разделяемой панели к окну формы

this.add(jSplitPane1, null);

// Добавление компонентов в контейнеры

// типа JScrollPane

jScrollPane1.getViewport().add(jTextPane1, null);

jScrollPane2.getViewport().add(jTextPane2, null);

}

}

 

Кнопки

 

Кнопки могут располагаться в контейнере как отдельно, так и в группе.

 

Пакет java.awt содержит следующие классы кнопок и групп:

Button - командная кнопка.

Checkbox - флажок или радиокнопка (переключатель).

CheckboxGroup - группа кнопок.

 

Пакет облегченных swing-компонентов также предоставляет несколько классов кнопок и групп, включая следующие классы:

JButton - кнопка.

JRadioButton - радиокнопка.

JToggleButton - кнопка-переключатель.

JCheckBox - флажок

ButtonGroup - группа кнопок.

 

На кнопках из пакета javax.swing помимо метки может также отображаться и пиктограмма.

 

Класс Button позволяет создавать объекты "командные кнопки". При нажатии на кнопку JVM инициирует событие действия actionPerformed. Наряду с данным семантическим событием, инициируется ряд простых событий, таких как mouseClicked.

 

Класс Button предоставляет ряд методов, включая следующие:

AddActionListener - регистрирует блок прослушивания для события действия от командной кнопки;

GetActionCommand - возвращает имя команды, инициировавшей событие действия, или метку кнопки, если имя команды равно null (значение по умолчанию);

GetLabel - возвращает метку командной кнопки или null для непомеченной командной кнопки;

SetLabel - изменяет метку командной кнопки.

 

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

 

Несколько переключателей могут быть объединены в группу, используя компонент CheckboxGroup, являющийся контейнером. Такая группа называется группой радиокнопок. Только один компонент группы может одновременно иметь состояние "включен".

 

Для обработки событий от кнопки используется интерфейс ItemListener. Этот интерфейс определяет всего один обработчик события - метод itemStateChanged (ItemEvent e).

 

Класс ItemEvent содержит метод getStateChange, позволяющий определить состояние кнопки. Метод может возвращать одно из двух возможных значений:

ItemEvent.SELECTED;

ItemEvent.DESELECTED.

 

Например:

// Определение состояния кнопки

void itemStateChanged(ItemEvent e) {

if (e.getStateChange() == ItemEvent.SELECTED)

{ // Кнопка находится во включенном состоянии

}

}

 

 

Для добавления кнопки в группу для нее следует вызвать метод setCheckboxGroup, указав в качестве параметра объект типа CheckboxGroup.

 

Следующий листинг иллюстрирует создание флажков и группы радиокнопок:

import java.applet.Applet;

import java.awt.*;

public class MyApplet extends Applet {

Panel panel1 = new Panel();

GridLayout gridLayout1 = new GridLayout();

// Создание новой кнопки:

Checkbox checkbox1 = new Checkbox();

Checkbox checkbox2 = new Checkbox();

 

GridLayout gridLayout2 = new GridLayout();

Panel panel2 = new Panel();

// Создание группы кнопок:

CheckboxGroup checkboxGroup1 = new CheckboxGroup();

Checkbox checkbox4 = new Checkbox();

Checkbox checkbox5 = new Checkbox();

Checkbox checkbox6 = new Checkbox();

FlowLayout FlowLayout1 = new FlowLayout();

public MyApplet() {

try { jbInit(); } catch(Exception e) { }

}

public static void main(String[] args) {

MyApplet myApplet1 = new MyApplet(); }

private void jbInit() throws Exception {

setLayout(gridLayout2);

panel1.setLayout(gridLayout1);

checkbox1.setLabel("Флажок 1");

checkbox2.setLabel("Флажок 2");

checkbox2.setState(true); // Состояние флажка -

// включен

gridLayout2.setRows(2);

panel2.setLayout(FlowLayout1);

// Добавление в группу трех кнопок:

checkbox4.setCheckboxGroup(checkboxGroup1);

checkbox4.setLabel("Радиокнопка 1");

checkbox4.setState(true); // Состояние радиокнопки -

// включена

checkbox5.setCheckboxGroup(checkboxGroup1);

checkbox5.setLabel("Радиокнопка 2");

checkbox6.setCheckboxGroup(checkboxGroup1);

checkbox6.setLabel("Радиокнопка 3");

// Добавление кнопок в контейнеры - панели

this.add(panel1, null);

panel1.add(checkbox1, null);

panel1.add(checkbox2, null);

this.add(panel2, null);

panel2.add(checkbox4, null);

panel2.add(checkbox5, null);

panel2.add(checkbox6, null);

}

}

 

Классы кнопок пакета javax.swing наследуются от класса AbstractButton. Этот класс предоставляет ряд общих методов, включая следующие:

doClick - выполнение щелчка мыши на кнопке программным способом;

getText- возвращает метку кнопки;

setText - устанавливает метку кнопки;

isSelected - определяет состояние кнопки и возвращает true, если переключаемая кнопка находится в состоянии "включена";

setSelected - устанавливает состояние кнопки;

setMargin - устанавливает отступы между рамкой кнопки и меткой;

setIcon - определяет пиктограмму, используемую по умолчанию. Эта пиктограмма используется для состояния кнопки "нажатая" или "недоступная" в том случае, если для этих состояний не указана иная пиктограмма;

setPressedIcon- определяет пиктограмму для нажатого ("pressed") состояния кнопки;

setSelectedIcon - устанавливает пиктограмму для выделенного ("selected") состояния кнопки;

setRolloverIcon - устанавливает пиктограмму для нажатого ("rollover") состояния кнопки (одновременно могут быть нажаты несколько кнопок);

setDisabledIcon- устанавливает пиктограмму для недоступного состояния кнопки.

 

Например:

ImageIcon ImageIcon1= new

ImageIcon("myicon.gif");

jButton1.setDisabledIcon(ImageIcon1);

 

setDisabledSelectedIcon - устанавливает пиктограмму недоступного для выделения состояния кнопки;

setVerticalAlignment - определяет выравнивание по вертикали для пиктограммы и метки, которое может указываться следующими значениями:

SwingConstants.CENTER (по умолчанию);

SwingConstants.TOP;

- SwingConstants.BOTTOM;

setHorizontalAlignment - определяет выравнивание по горизонтали для пиктограммы и метки, которое может указываться следующими значениями:

SwingConstants.RIGHT (по умолчанию);

SwingConstants.LEFT;

SwingConstants.CENTER;

SwingConstants.LEADING;

SwingConstants.TRAILING;

setVerticalTextPosition - определяет позицию текста по вертикали относительно пиктограммы, которая может указываться следующими значениями:

SwingConstants.CENTER (по умолчанию);

SwingConstants.TOP;

SwingConstants.BOTTOM;

setHorizontalTextPosition - определяет позицию текста по горизонтали относительно пиктограммы, которая может указываться следующими значениями:

SwingConstants.RIGHT (по умолчанию);

SwingConstants.LEFT;

SwingConstants.CENTER;

SwingConstants.LEADING;

SwingConstants.TRAILING.

setActionCommand - задает команду действия для кнопки;

getActionCommand - возвращает строку, которая содержит команду действия, установленную для данной кнопки;

setMnemonic - определяет код символа, используемого как ключ-акселератор (ALT+данный символ).

 

Например:

 

jButton1.setMnemonic(KeyEvent.VK_A);

 

Для того чтобы определить в методе обработки события itemStateChanged(ItemEvent e), какой кнопкой было инициировано данное событие, следует использовать метод getItemSelectable.

 

Для того чтобы определить, является ли кнопка, инициировавшая событие, выделенной (находящейся в состоянии "включена" или "нажата"), следует использовать метод getStateChange.

 

Например:

if (e.getItemSelectable() ==

jCheckBox1 && e.getStateChange()==e.SELECTED) {

}

 

 

Класс JToggleButton предназначен для создания кнопок, имеющих два состояния - "нажата" и "не нажата". Компонент JToggleButton может находится в зафиксированном нажатом состоянии (быть выделенным).

 

Этот класс является непосредственным суперклассом для классов JCheckbox и JRadioButton.

 

Для того чтобы установить состояние кнопки, следует использовать метод setSelected .

 

Например:

 

jToggleButton1.setSelected(true);

 

Кнопки JToggleButton могут быть объединены в группу. Такую группу следует предварительно создать, используя компонент типа javax.swing.ButtonGroup. Только одна из кнопок группы может одновременно иметь нажатое состояние.

Текстовые компоненты

 

Текстовые компоненты предназначаются для ввода и отображения строк.

 

Библиотека JDK предоставляет следующие классы текстовых компонентов:

java.awt.TextArea - текстовая область.

java.awt.TextField - текстовое поле, называемое также полем ввода.

javax.swing.JTextField - текстовое поле.

javax.swing.JPasswordField - текстовое поле, предназначаемое для ввода пароля.

javax.swing.JTextArea - текстовая область.

javax.swing.JEditorPane - панель редактора, позволяющая отображать как текстовые, так и графические данные, а также применять различное форматирование текста.

javax.swing.JTextPane - текстовая панель, позволяющая отображать содержимое с использованием различных шрифтов.

 

Все текстовые компоненты пакета java.awt наследуются от класса TextComponent.

 

Все текстовые компоненты пакета javax.swing наследуются от класса JTextComponent.

 

Для отображения текста, который может быть изменен только программным путем, служат компоненты .Label из пакета java.awt и JLabel из пакета javax.swing.

 

Компонент JLabel также можно использовать и для отображения рисунков.

 

Большинство названий методов, предоставляемых классами TextComponent и JTextComponent для работы с текстом, совпадают. Так, для того чтобы получить строку, которая содержит весь текст, расположенный в текстовом компоненте, можно использовать метод getText, а для получения позиции ввода - метод getCaretPosition; для определения, можно ли редактировать текст, - метод isEditable, для выделения текста в указанном диапазоне - метод select, а для выделения всего текста - метод selectAll.

 

При каждом изменении значения текстового компонента, включая ввод каждого символа, происходит событие textValueChanged. При нажатии на клавишу Enter для текстового поля инициируется событие actionPerformed. Но при перемещении фокуса ввода событие actionPerformed не происходит.

 

Класс TextField позволяет создавать однострочные текстовые поля, используемые для ввода и редактирования одной строки текста. Этот класс предоставляет ряд методов, включая следующие:

AddActionListener - регистрирует блок прослушивания для обработки события действия компонента "текстовое поле".

EchoCharIsSet - возвращает значение true в том случае, если ввод в данное текстовое поле отображается некоторым эхо-символом, скрывающим действительное значение поля.

GetColumns - возвращает размер данного текстового поля (количество символов).

GetEchoChar - возвращает эхо-символ для данного текстового поля.

SetEchoCharacter - устанавливает значение эхо-символа для данного текстового поля. Любой вводимый пользователем символ будет экранирован данным эхо-символом.

SetColumns - устанавливает размер текстового поля в символах.

SetText - определяет новое значение текстового поля.

 

Хотя компоненты пакета javax.swing и называются облегченными, но они предоставляют значительно большие возможности, чем традиционные текстовые компоненты пакета java.awt.

 

Управление текстом, отображаемым в текстовом компоненте, определяется интерфейсом Document. Этот интерфейс предназначен для определения методов работы с текстом. Интерфейс Documentреализован классом AbstractDocument.

 

Текст в компоненте типа JTextComponent представляется ассоциируемой с ним текстовой моделью, определяющей как содержание, так и стиль.

 

Фактически, текстовый компонент предоставляет доступ к:

модели, реализуемой на основе интерфейса Document и представляющей собой содержание документа;

области просмотра текстового компонента;

набору команд редактирования, предусмотренного для текстового компонента;

таблице ключей акселераторов, связанных с таблицей именованных действий.

 

Класс DefaultEditorKit и StyledEditorKit описывают набор именованных действий, которые можно использовать для создания на основе текстового компонента редактора текста.

 

В классе DefaultEditorKit определен набор предоставляемых текстовому компоненту действий, таких как перемещение курсора, выделение или вставка текста.

 

Например, для создания пункта меню, выполняющего форматирование выделенного диапазона текста, и изменения размера шрифта на 14p, следует записать:

menu.add(new StyledEditorKit.FontSizeAction (

"Имя пункта меню", 14));

 

 

Константы класса DefaultEditorKit описывают набор именованных действий, включая следующие:

BackwardAction - перемещение позиции ввода на одну позицию назад.

BeepAction - подача звукового сигнала.

BeginAction - перемещение позиции ввода на начало документа.

BeginParagraphAction - перемещение позиции ввода в начало абзаца.

BeginLineAction - перемещение позиции ввода в начало строки.

BeginWordAction - перемещение позиции ввода на начало текущего слова.

CutAction - вырезание выделенного диапазона текста и помещение его в буфер обмена.

CopyAction - копирование выделенного диапазона текста в буфер обмена.

DeleteNextCharAction - удаление следующего символа.

DownAction- перемещение позиции ввода на один ряд вниз.

DeletePrevCharAction - удаление предыдущего символа.

EndAction - перемещение позиции ввода в конец документа.

EndLineAction - перемещение позиции ввода в конец строки.

EndParagraphAction - перемещение позиции ввода в конец абзаца.

EndWordAction - перемещение позиции ввода на конец текущего слова.

ForwardAction - перемещение позиции ввода на один символ вперед.

InsertBreakAction - вставка в документ символа конца абзаца.

InsertTabAction - вставка символа табуляции.

NextWordAction - перемещение позиции ввода на начало следующего слова.

PageDownAction - перемещение позиции ввода на одну страницу вниз.

PageUpAction - перемещение позиции ввода на одну страницу вверх.

PasteAction - вставка содержимого буфера обмена вместо выделенного диапазона текста или перед текущей позицией ввода.

PreviousWordAction - перемещение позиции ввода на начало предыдущего слова.

ReadOnlyAction - перевод редактора в режим "только чтение".

SelectAllAction - выделение всего документа.

SelectionBackwardAction - расширение области выделения на одну позицию назад (влево).

SelectionBeginAction - расширение области выделения до начала документа.

SelectionBeginLineAction- расширение области выделения до начала текущей строки.

SelectionBeginParagraphAction - расширение области выделения до начала текущего абзаца.

SelectionBeginWordAction - расширение области выделения до начала текущего слова.

SelectionDownAction - расширение области выделения на одну позицию вниз.

SelectionEndAction - расширение области выделения до конца документа.

SelectionEndLineAction - расширение области выделения до конца строки.

SelectionEndParagraphAction- расширение области выделения до конца абзаца.

SelectionEndWordAction - расширение области выделения до конца текущего слова.

SelectionForwardAction - расширение области выделения на один символ вперед (вправо).

SelectionNextWordAction - расширение области выделения до начала следующего слова.

SelectionPreviousWordAction - расширение области выделения до начала предыдущего слова.

SelectionUpAction - расширение области выделения на одну позицию вверх.

SelectLineAction - выделение строки, в которой расположена позиция ввода.

SelectParagraphAction - выделение абзаца, в котором расположена позиция ввода.

SelectWordAction - выделение слова, в котором расположена позиция ввода.

UpAction - перемещение позиции ввода на одну позицию вниз.

WritableAction - перевод редактора в режим редактирования текста.

 

Для того чтобы добавить в документ строку в отформатированном виде, можно использовать метод insertS класса DefaultStyledDocument. Этот класс является подклассом класса AbstractDocumentи реализует интерфейсы Document и StyledDocument.

 

Интерфейс StyledDocument определяет методы для работы со стилем документа. Так, для назначения диапазону текста набора атрибутов стиля можно использовать метод setCharacter-Attributes, а для определения используемого стиля или шрифта - методы getStyle и getFont.

 

Атрибуты стиля определяются интерфейсом AttributeSet. Этот интерфейс реализован классом SimpleAttributeSet.

 

Для создания набора атрибутов стиля следует создать переменную типа SimpleAttributeSet и установить атрибуты стиля, используя методы класса

 

Например:

SimpleAttributeSet attrSt = new SimpleAttributeSet();

StyleConstants.setBold(attrSt, true);

StyleConstants.setFontSize(attrSt, 12);

StyleConstants.setForeground(attrSt, Color.red);

 

При добавлении строки в текстовый документ вызовом метода insertString класса Default-StyledDocument один из параметров ссылается на набор аттрибутов.

 

Фактически набор атрибутов стиля накладывается на диапазон текста. Если текстовый компонент содержит текст с различным форматированием, то на каждый отдельный диапазон текста должен быть "наложен" свой набор атрибутов стиля.

 

Для создания таблицы ключей акселераторов, используемых для текстового компонента, следует:

Создать объект класса Keymap для компонента класса JTextPane.

 

Например:

JTextPane textPane;

....

Keymap keymap = textPane.addKeymap("MyKeymap",

textPane.getKeymap());

 

Создать объект класса Action и установить для него действие, описанное в классе DefaultEditorKit.

 

Например:

Action action = getActionByName(DefaultEditorKit.downAction);

Создать объект класса KeyStroke и установить для него значение ключа акселератора.

 

Например:

KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_N,

Event.CTRL_MASK);

 

Установить связь между созданным действием и ключем акселератором.

 

Например:

keymap.addActionForKeyStroke(key, action);

 

Класс StyleConstants предоставляет набор методов, позволяющих определять или устанавливать значения для атрибутов форматирования.

 

Набор атрибутов форматирования может быть создан как объект одного из следующих классов:

SimpleAttributeSet .

AttributeSet .

MutableAttributeSet .

 

Например:

...SimpleAttributeSet[] attrs = new

SimpleAttributeSet[stringForPane.length +1];

// Создание набора атрибутов:

attrs[0] = new SimpleAttributeSet();

StyleConstants.setFontFamily(attrs[0], "SansSerif");

// Установка значения атрибута

StyleConstants.setFontSize(attrs[0], 12);

attrs[1] = new SimpleAttributeSet(attrs[0]);

StyleConstants.setFontSize(attrs[1], 14);

StyleConstants.setBold(attrs[1], true);

// Добавление строки в документ с заданным набором

// атрибутов (defaultStyleDocument1 переменная

// класса, наследуемого от DefaultStyleDocument)

defaultStyleDocument1.insertString(

defaultStyleDocument1.length,

string1,

attrs[1]);

Списки

 

Списки позволяют отображать группу элементов в один столбец, предоставляя пользователю возможность выбора элемента.

 

Библиотека JDK содержит ряд классов списков, включая следующие:

java.awt.List - список.

java.awt.Choice - ниспадающий список.

javax.swing.JList - список.

javax.swing.JComboBox - ниспадающий список.

 

При выделении элемента в списке или в ниспадающем списке (или отмене выделения) инициируется событие itemStateChanged. В метод обработки этого события передается объект типа ItemEvent. Используя свойство SELECTED для объекта типа ItemEvent, можно определить, выделен ли элемент списка. Интерфейс ItemListener описывает метод обработки события itemStateChanged.

 

При двойном щелчке мышью на элементе списка (или нажатии клавиши Enter при выделенном элементе списка) для компонента типа List, JList или JComboBox инициируется событие actionPerformed. В метод обработки этого события передается объект типа ActionEvent. Интерфейс ActionListener описывает метод обработки события actionPerformed.

 

Заполнение списков можно выполнять в обработчике события фрейма windowOpened. Добавление элементов в список List и Choice выполняется методом add.

 

Например:

List list1 = new List(4, false); // Создание списка

// с 4 видимыми строками и с запретом множественного выбора

list1.add("Строка 1"); // Добавление элементов в список

list1.add("Строка 2");

list1.add("Строка 3");

list1.add("Строка 4");

list1.add("Строка 5");

list1.add("Строка 6");

add(list1); // Добавление списка в текущий контейнер

 

 

Список JList позволяет выделять один или несколько элементов. Содержание списка представляется моделью ListModel. Доступ к элементам списка реализуется с использованием модели. Для заполнения списка используется метод setListData.

 

Список JList непосредственно не поддерживает прокрутку списка. Реализовать скроллинг можно двумя способами:

Поместить список в контейнер типа JScrollPane. Например:

JScrollPane scrollPane = new JScrollPane(jList1);

Установить для объекта типа JScrollPane на уровне Viewport (getViewport) в качестве компонента области просмотра (setView) объект типа JList. Например:

 

JScrollPane scrollPane = new JScrollPane();

scrollPane.getViewport().(jList1);

 

 

Например:

String[] data = {"один", "два", "три"}; // Массив строк

JList jList1 = new JList(data); // Создание списка,

// содержащего массив строк

// Доступ к элементам списка через модель

for(int i = 0; i<jList1.getModel().getSize(); i++) {

System.out.println(jList1.getModel().getElementAt(i)); }

// Заполнение списка данными, представляемыми классом Vector

JList jList1 = new JList();

Vector superClasses = new Vector();

Class rootClass = javax.swing.JList.class; // Создание объекта

// типа Class

for(Class cls = rootClass; cls != null;

cls = cls.getSuperclass())

{ // Получение всех подклассов

superClasses.addElement(cls); }

jList1.setListData(superClasses); // Заполнение компонента jList1

// списком всех его подклассов

// Добавление элементов в список, хранимый в объекте типа Vector

superClasses.addElement(new String("12345"));

// Выделение элементов списка:

jList1.setSelectedIndex(1); // Выделение второго элемента списка

jList1.getSelectedValue(); // Возвращает строку, отображаемую

//во втором элементе списка

 

– Конец работы –

Эта тема принадлежит разделу:

Введение в Java

Операторы ветвления... Операторов ветвления в Java два if и switch Первый позволяет пойти программе по одному из двух направлений второй...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Менеджеры компоновок

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Что такое Java и как она работает?
  Если кратко, то Java - это один из языков программирования. Он разработан компанией Sun, и является платформо-независимым. Это означает, что программа, написанная на Java, будет оди

Что такое JDK и как его установить?
  JDK расшифровывается как Java Developer Kit. Это набор программ и утилит, предназначенный для программирования на Java. В него ряд утилит. Вот некоторые из них: Компилятор

Категории программ Java
● Приложение (application) – аналог “обычной” прикладной программы. ● Апплет (applet) – специализированная программа, работающая в окне WWW-документа под управлением браузера.

SDK - Software Development Kit
Поставить на компьютер исполняющую среду Java (JVM) можно путём установки SDK – Комплекта разработки программного обеспечения. Имеется три типа SDK: ● Java ME– компл

Первая программа на Java
  Первая программа, по давно укоренившейся традиции, будет HelloWorld. Ниже приводится ее текст, который надо набрать в любом текстовом редакторе, позволяющем сохранять документ в ASC

Числовые типы данных
  Числовые типы данных Java перечислены в следующей таблице: Тип Описание Количество байтов int

Логический тип
  Переменные логического типа могут принимать значение или true (истина), или false (ложь). Сразу обратите внимание, что нельзя вместо true и false писать нулевое и ненулевое значения

Массивы
  Начнем сразу с примеров. Вот пример, в котором мы заводим массив из 3-х целых чисел, в каждое из которых мы записываем случайное целое число от 0 до 9 и затем выводим все числа на э

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

Модификатор final
  Иногда мы не хотим, чтобы от некоторого созданного нами класса можно было производить классы-потомки. Например, это может понадобиться в целях безопасности.  

Первая оконная программа
  Все программы, которые мы создавали до сих пор, были консольными. На этом занятии мы с вами создадим первую программу, которая будет будет иметь оконный вид. Ее можно будет запустит

Читаем строку с клавиатуры
  Вы, наверное, обратили внимание, что раньше мы старательно избегали получать данные от пользователя. Значения всем переменным мы задавали непосредственно в программе. Сейчас мы и уз

Читаем числа с клавиатуры
  Вот пример класса, который может читать числа с клавиатуры: import java.io.*; class NumReader{ public static void main(String [] args) throws IOException{

Закрытие оконной программы
  Давайте дополним код нашей первой оконной программы по крайней мере таким образом, чтобы она закрывалась: import java.awt.*; import java.awt.event.*; clas

Пакет java.awt - обзор
  Пакет java.awt предназначен для создания пользовательского интерфейса. Он, в частности, содержит классы для различных компонентов - кнопок, текстовых полей, классы для меню, классы

Библиотека Swing - делаем окно
  В Java существует две библиотеки для создания пользовательского интерфейса - Awt и Swing. Swing считается более продвинутой и современной. Сегодня мы создадим окно с использованием

Swing: добавляем кнопку с обработчиком
  Посмотрим, как можно добавить к созданному ранее окну кнопку с обработчиком.   Наша кнопка будет экземпляром класса JButton. Вообще схема работы с элементами

Swing: кнопка с двумя состояниями
  В библиотеке swing наряду с обычной кнопкой есть кнопка с двумя состояниями - нажатом и отжатом. Она работает приблизительно как checkbox, только выглядеть по-другому. Для создания

Правильное закрытие программы
  Созданные нами ранее программы работали не вполне корректно - а именно после своего закрытия они оставались в памяти. Убедится в этом было достаточно просто - запустив и закрыв прог

Swing: элемент JCheckBox
  Элемент JCheckBox - это обычный checkbox (флажок). Он имеет вид квадратика, в котором может стоять (или не стоять) галочка. Этот элемент может иметь 22 состояния - либо включенное,

Swing: JRadioButton
  Элемент управления JRadioButton предназначен для организации выбора только одного значения из нескольких возможных. Для этого несколько элементов JRadioButton объединяются в одну гр

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

Swing: Список JList
  Класс JList предназначен для выбора пользователем одного или нескольких значений из списка. В этом элементе пользовательского интерфейса можно выбирать как один элемент, так и неско

Простой графический редактор
  import java.awt.*; import java.awt.event.*; public class DrawCanvas extends Canvas { private int lastX, lastY; private int ex, ey; priva

Интерфейсы
  Интерфейсы в Java предназначены только для объявления некоторых методов и констант. Никакие реализации методов в интерфейсах не предусматриваются. Т. е. интерфейс только содержит ин

Интерфейс в качестве типа
  Мы не можем создать экземпляр интерфейса. Именно потому, что у него не существует реализации методов. Т. е. мы не можем написать, например, так: IFigure f = new IFigure();

Множественное наследование
  В Java, как и во многих других языках программирования, не допускается множественное наследование для классов. У класса может быть только один непосредственный предок (у которого, в

Инверсия списка
  Рассмотрим с вами решение классической задачи - инверсии (т. е. размещению элементов в обратном порядке) списка. Список устроен следующим образом: каждый элемент списка содержит, во

Работа с файлами и дисками
  Для работы с файлами и дисками служит все тот же рассмотренный нами ранее класс File. Вот несколько примеров его использования для работы с папками и дисками: import java.i

Получение системных свойств
  Для получения системных свойств (таких, например, как имя пользователя, версия виртуальной java-машины или разделителя между папками для конкретной операционной системы) используетс

Перечисления (enum) 2
  В Java, в отличие от многих других языков программирования, в перечисления можно добавлять методы, переменные и другие члены. Этим перечисления очень напоминают на классы.

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

Что такое апплет?
Апплет - это небольшая программа на языке Java, которая может выполнятся в окне браузера. Сам по себе апплет, в отличие от других java-программ, выполнятся не может - присутствие браузера тут обяза

Пишем первый апплет
Первый апплет, по давно укоренившейся традиции, покажет нам некоторую надпись. В нашем примере это будет "FirstApplet". Итак, создайте файл FirstApplet.java и внесите в него следующий тек

Рисуем прямоугольники и эллипсы
Для рисования прямоульников и эллипсов служат методы drawOval, drawRect, fillOval и fillRect класса Graphics. Первые два из них рисуют прямоугольник и эллипс соответственно, последние два служат дл

Закрашиваем фон
По умолчанию апплет имеет серый фон. Для изменения фона служит метод setBackground. Этот метод принимает в качестве параметра переменную типа Color. Вот пример апплета с синим цветом фона:

Изменяем шрифт
Для вывода некоторой надписи в апплет мы используем метод drawString объекта Graphics. Этот метод имеет три параметра (что на надпись и расположение на апплете). По умолчанию используется стандартн

Мигающая надпись
Давайте посмотрим, как мы может достичь в апплете эффекта мигающей надписи (это как мигающие банеры, только не так надоедает ;)). Вот пример: import java.awt.*;import

Бегущая строка
Бегущую строку в апплете можно реализовать аналогично мигающей строке, рассмотренной на прошлом уроке. Отличие только в том, что в методе paint мы вместо изменения цвета изменяем координату x нашей

Работаем с мышью
Работа с мышкой происходит на основе модели делегирования событий. Дело тут происходит приблизительно так: есть некоторый источник событий - например, мышка. Этот источник генерирует определенные с

Интерфейс MouseListener
Для работы с мышью сушествуют два интерфейса. На этом уроке мы рассмотрим один из них - а именно MouseListener. В этом интерфейсе существует следующие пять методов: mouseCli

Интерфейс MouseMotionListener
Второй интерфейс, который позволяет реализовать работу с мышью - это MouseMotionListener. В этом интерфейсе только два метода: mouseMoved (перемещение мыши) mouseD

Работаем с клавиатурой
Для работы с клавиатурой используется интерфейс KeyListener. Т. е. класс нашего апплета должен реализовывать этот интерфейс для работы с клавиатурой. В этом интерфейсе имеется три метода: keyPresse

Вставляем изображение в апплет
Разумеется, рисовать в апплете с использованием примитивов - задача не из легких. Поэтому части поступают так - рисуют качественные изображения в каком-нибудь графическом редакторе, сохраняют их в

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

Передача данных в апплет
Часто нам надо настроить апплет в соответствии с некоми параметрами. Параметры могут браться из различных источников - например из внешнего файла или из базы данных. На этом уроке мы рассмотрим, ка

Продолжение игры
На этом уроке мы закончим наш апплет с игрой "Убей муху". Нам осталось только добавить обработчики для щелчка мыши. При нажатии на кнопку мыши мы будет проверять, не попали ли мы

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги