И.Н. Блинов, В.С. Романчик - Основы программирования на языке Java (1160783), страница 9
Текст из файла (страница 9)
Такого родаклассы компонент были объединены в библиотеку под названиемSwing. Пакет javax.swing содержит класс JApplet подкласс суперкласса Applet.// пример #8 : апплет с компонентом : MyJApplet.javaimport javax.swing.*;import java.awt.*;public class MyJApplet extends JApplet {Jlabel lbl;public void init() {Container c = getContentPane();lbl = new JLabel("Swing-апплет!"));c.add(lbl);54}}В этой программе производится помещение текстовой метки наформу в апплете с помощью класса JLabel (в AWT есть соответствующий класс Label, лидирующая "J" используется также и для других компонентов Swing). Конструктор класса Jlabel принимает Stringи использует для создания метки.
Метод init() отвечает за помещениевсех компонентов на форму, используя метод add(). Метод add() сразу не вызывается, как в библиотеке AWT. Пакет Swing требует, чтобывсе компоненты добавлялись в "панель содержания" формы, так чтотребуется вызывать getContentPane(), как часть процесса add().// пример #9 : работа методов init(), start(), stop() : InitDemo.javaimport java.applet.*;import java.awt.*;public class InitDemo extends JApplet {private int i ;private String msg = null;private Color c;public void init() {c = new Color(0,0,255);this.setBackground(c);this.setForeground(Color.white);setFont(new java.awt.Font("Courier", 1, 14));msg = "инициализация";i = 1;}public void start() {int j = i * 25;if (j < 255){ c = new Color (j, j, 255 - j); }setBackground(c);String str = Integer.toString(i);msg += " " + str;}public void paint(Graphics g) { g.drawString(msg, 30, 30);}public void stop() { i++; msg = "работа start() - stop()"; }}При работе со шрифтами можно узнать какие из них доступны накомпьютере и использовать их.
Для получения этой информации применяетсяметодgetAvailableFontFamilyNames()класса55GraphicsEnvironment. Метод возвращает массив строк, содержащийимена доступных семейств шрифтов.//пример #10 : демонстрация различных шрифтов : FontDemo.javaimport javax.swing.*;import java.awt.*;public class FontDemo extends JApplet {private int i ;private String msg = null;private String[] fonts;public void init() {GraphicsEnvironment ge =GraphicsEnvironment.getLocalGraphicsEnvironment();fonts = ge.getAvailableFontFamilyNames();}public void start() {int j = i;if (j > fonts.length) i = 0;else setFont(new Font(fonts[j], 1, 14));String str = Integer.toString(i);msg = fonts[j]+ " " + str;i++;}public void paint(Graphics g) { g.drawString(msg, 30, 30); }}Библиотека Swing поддерживает набор графических методов.
Всяграфика рисуется относительно окна. Вывод в окно выполняется черезграфический контекст: paint() или update(). Класс Graphics, объекткоторого передается в контекст, определяет функции рисования.В следующем апплете проверяется принадлежность точки нажатия"мыши" прямоугольнику.// пример #11 : рисование прямоугольника : MyRect.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;public class MyRect extends JApplet implements MouseListener {Rectangle a = new Rectangle(20, 20, 100, 60);public void init() {setBackground(Color.yellow);addMouseListener(this);}56public void mouseClicked(MouseEvent me) {int x = me.getX();int y = me.getY();if (a.inside(x,y)) System.out.println("клик в зеленом Rect");else System.out.println("клик в желтом");}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}public void paint(Graphics g) {g.setColor(Color.green);g.fillRect(a.x, a.y, a.width, a.height);}}Упражнения1.
<applet code=MyApplet.class width=200 height=200><param name=count value=5></applet>Какой код метода init() читает параметр count в переменную i?а)int i = new Integer(getParameter("count")).intValue();б)int i = getIntParameter("count");с)int i = getParameter("count");д)int i = new Integer(getIntParameter("count"));е)int i = new Integer(getParameter("count"));2.
Вы нажали кнопку изменения цвета основания (background) апплета. Какойметод должен быть вызван, чтобы это сделать?а)setbgcolor(); б)draw(); в)start(); г)repaint().10. ЭЛЕМЕНТЫ УПРАВЛЕНИЯРазвитие языка Java идет в направлении перехода к так называемым "легким" компонентам пользовательского интерфейса. В ранних(1.0.x) версиях JDK использовались "тяжелые" компоненты AWT, связанные с аппаратными платформами. Дальнейшее развертывание концепции "write once, run everywhere" (написать однажды, запускать везде) привело к тому, что в версии 1.1.x наметился переход к такимкомпонентам, которые бы не были завязаны на конкретные "железо" иоперационные системы.
Такого рода классы компонентов были объединены в библиотеку под названием Swing и доступны разработчикамв составе как JDK, так и отдельного продукта JFC (Java FoundationClasses). Причем для совместимости со старыми версиями JDK старые57компоненты из AWT остались нетронутыми, хотя компания JavaSoft,отвечающая за выпуск JDK, − рекомендует не смешивать в одной итой же программе старые и новые компоненты.Для работы с окнами используются классы JFrame и JPanel избиблиотеки Swing вместо Frame и Panel из стандартного набора классов AWT.
Панели класса JPanel должны добавляться в окна классаJFrame исключительно методом setContentPane(), а не add(), как этоделается в AWT.От AbstractButton наследуются два основных кнопочных класса:JButton и JToggleButton. Первый служит для создания обычных кнопок с разнообразными возможностями, а второй − для создания радиокнопок (класс JRadioButton) и отмечаемых кнопок (классJCheckBox).
Помимо названных, от AbstractButton наследуется параклассов JCheckBoxMenuItem и JRadioButtonMenuItem, используемых для организации тех меню, пункты которых должны быть оснащены отмечаемыми и радиокнопками.Процесс создания кнопок достаточно прост: вызывается конструктор JButton с меткой, которую нужно поместить на кнопке. КлассJButton библиотеки Swing для создания обычных кнопок предлагаетнесколько различных конструкторов: JButton(), JButton(String),JButton(Icon), JButton(String, Icon).Если используется конструктор без параметров, то получится абсолютно пустая кнопка.
Задав текстовую строку, получим кнопку с надписью. Для создания кнопки с рисунком конструктору передаетсяссылка на класс пиктограммы. Класс JButton содержит несколько десятков методов. JButton − это компонент, который автоматически перерисовывается как часть обновления. Это означает, что не нужно явно вызывать перерисовку кнопки как и любого управляющего элемента; он просто помещается на форму и сам автоматически заботится освоей перерисовке. Чтобы поместить кнопку на форму, необходимовыполнить это внутри init(). Перед помещением любого элемента наформу создается новый "менеджер компоновки" типа FlowLayout.Менеджер компоновки − это способ, которым панель решает, где поместить управляющий элемент на форме. Каждый раз, когда кнопканажимается, генерируется action-событие.
Оно посылается блокампрослушивания, зарегистрированным для приема события от этогокомпонента.// пример #1 : создание кнопки : MyButtons.javaimport java.awt.*;import javax.swing.*;58import java.awt.event.*;public class MyButtons extends JApplet implements ActionListener {String msg;JButton yes, maybe;JLabel lbl;public void init() {yes = new JButton ("да");maybe = new JButton ("возможно");lbl = new JLabel("");Container c = getContentPane();c.setLayout(new FlowLayout());c.add(yes);c.add(maybe);c.add(lbl);yes.addActionListener(this);maybe.addActionListener(this);}public void actionPerformed(ActionEvent ae) {String str = ae.getActionCommand();if (str.equals("да")) msg = "нажата кнопка <да>";else msg = "нажата кнопка <возможно>";lbl.setText(msg);}}В этом примере метка кнопки используется для того, чтобыопределить, какая из них была нажата.
Метка возвращается вызовомметода getActionCommand() объекта ActionEvent, передаваемогометоду actionPerformed().Метод setText() объекта JLabelиспользуется для передачи строки в объект lbl.// пример #2 : вывод в текстовое поле : MyTextField.javaimport java.awt.*;import javax.swing.*;import java.awt.event.*;public class MyTextField extends JApplet implements ActionListener{ String msg;JButton yes, maybe;JTextField txt;public void init() {yes = new JButton ("да");maybe = new JButton ("возможно");59txt = new JTextField(10);Container c = getContentPane();c .setLayout(new FlowLayout());c.add(yes);c.add(maybe);c.add(txt);yes.addActionListener(this);maybe.addActionListener(this);}public void actionPerformed(ActionEvent ae) {String name = ((JButton)ae.getSource()).getText();txt.setText(name);}}Создание JTextField и помещение его на канву − это шаги, необходимые и для JButton или любого компонента Swing.
Аргумент дляactionPerformed() имеет тип ActionEvent, который содержит всю информацию о событии и откуда оно исходит. В этом случае описывается кнопка, которая была нажата: getSource() производит объект,явившийся источником события, и JButton. getText() возвращаеттекст, который есть на кнопке, и помещается в JTextField для демонстрации, что код действительно был вызван при нажатии кнопки.Класс JComboBox используется для создания раскрывающегосясписка элементов, из которых пользователем производится выбор. Таким образом, данный элемент управления имеет форму меню.