Пример 4.11. Задача для самостоятельного решения на занятии 4.4. 4.4. Задания к лабораторной работе №4. 4.4.1. Требования к отчету (отчет обязателен)
Пример 4. 11 class Handler implements ActionListener { boolean flag = true; JButton b; public Handler (JButton bb) { b = bb; } @Override public void actionPerformed(ActionEvent e) { flag =! flag; b. setText(flag? " Hello! ": " Goodbye! " ); } }
public class Events extends JFrame {
public static void main(String[] args) { JFrame f = new JFrame(" Events" ); JPanel p = new JPanel(); JButton b1 = new JButton(" Hello! " ); JButton b2 = new JButton(" Hello! " ); Handler h1 = new Handler(b2); Handler h2 = new Handler(b1); b1. addActionListener(h1); b2. addActionListener(h2); p. add(b1); p. add(b2); f. setSize(300, 200); f. add(p); f. setDefaultCloseOperation(EXIT_ON_CLOSE); f. setVisible(true); } } Интерфейс ActionListener имеет всего один метод — actionPerformed(), вызываемый у объекта- обработчика событий для выполнения надлежащих действий по обработке события. Задача для самостоятельного решения на занятии 4. 4. Написать программу, при запуске которой в главном окне появляется две кнопки, каждая из которых включает/отключает другую (для включения кнопки нужно вызвать метод setEnabled(true), для отключения — setEnabled (false) ). 4. 4. Задания к лабораторной работе №4
*) Примечание События типа ActionEvent проявляются в компонентах Button, List, TextField, JComboBox, JTextField, кнопках класса AbstractButton и его наследниках. Т. е во всех вариантах необходимо добавлять объект (или применять интерфейс) ActionListener, в котором реализовать обработчик в функции public void actionPerfomed(ActionEvent e).
**) В этом задании придется разбираться с рисованием и перерисовкой. 4. 4. 1. Требования к отчету (отчет обязателен)
Рисование За рисование графических примитивов в компонентах Component и JComponent отвечает объект класса Graphics (подробнее см. лекцию 8).
package paintcomp;
import java. awt. *; import javax. swing. *;
/** * * @author owner */ public class PaintComp extends JFrame{
public class DrawingPanel extends JPanel {
@Override protected void paintComponent(Graphics g) { super. paintComponent(g); g. setColor(Color. GREEN); g. fillOval(50, 30, 100, 150); g. setC olor(Color. BLUE); g. fillRect(90, 80, 150, 100); g. setColor(Color. RED); g. fillRoundRect(130, 30, 80, 160, 20, 40); } }
public PaintComp () { super(" Пример окна верхнего уровня" ); setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE); setSize(300, 250); add(new DrawingPanel()); }
public static void main(String[] args) { EventQueue. invokeLater(new Runnable() {@Override public void run() { new PaintComp(). setVisible(true); } }); } }
Важно: Во всех предыдущих примерах графические окна были запущены некорректно. Правильно: все действия с библиотекой Swing запускать в потоке выполнения обработки событий (Event Dispatch Thread). Для добавления своего кода в поток обработки событий предназначен статический метод EventQueue. invokeLater(Runnable), принимающий в качестве аргумента экземпляр класса, реализующего интерфейс Runnable.
Интерфейс Runnable: Интерфейс Runnable предназначен для реализации потоков выполнения в Java. Он содержит единственный метод void run(), который вызывается при запуске потока. public interface Runnable { public void run(); } Пример:
import javax. swing. *; public class Window {
public static void main(String args[]) {
EventQueue. invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame(" Пример окна верхнего уровня" ); frame. setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE); frame. setSize(300, 200); frame. setVisible(true); } }); } } Пояснение вышесказанного будет обсуждаться далее при работе с потоками.
ЛАБОРАТОРНАЯ РАБОТА 5
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|