Занятие 7. Обработка событий в Java
Оглавление "Обработка событий в Java"
Пример 1.1. Файл MyNotebook.java
Пример 1.2. Файл MyNotebook.java
Пример 1.3. Файл MyNotebook.java
Пример 2. Файл ScribbleTest.java
Пример 1.1. Файл MyNotebook.java
Создание отдельного класса-обработчика TextMove для события класса ActionEvent.
import java.awt.*; import java.awt.event.*; class MyNotebook extends Frame{ MyNotebook(String title) { super(title); TextField tf = new TextField("Вводите текст", 50); add(tf, BorderLayout.NORTH); TextArea ta = new TextArea(); ta.setEditable(false); add(ta); Panel p = new Panel(); add(p, BorderLayout.SOUTH); Button b = new Button("Перенести"); p.add(b); tf.addActionListener(new TextMove(tf, ta)); b.addActionListener(new TextMove(tf, ta)); setSize(300, 200); setVisible(true); } public static void main(String[] args){ Frame f = new MyNotebook(" Обработка ActionEvent"); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent ev){ System.exit(0); } }); } } class TextMove implements ActionListener{ private TextField tf; private TextArea ta; TextMove(TextField tf, TextArea ta){ this.tf = tf; this.ta = ta; } public void actionPerformed(ActionEvent ae){ ta.append(tf.getText()+"\n"); } }
Пример 1.2. Файл MyNotebook.java
Обработка события в классе, который содержит источник события, т.е. реализация интерфейса в классе-контейнере.
import java.awt.*; import java.awt.event.*; class MyNotebook extends Frame{ MyNotebook(String title) { super(title); TextField tf = new TextField("Вводите текст", 50); add(tf, BorderLayout.NORTH); TextArea ta = new TextArea(); ta.setEditable(false); add(ta); Panel p = new Panel(); add(p, BorderLayout.SOUTH); Button b = new Button("Перенести"); p.add(b); tf.addActionListener(new TextMove(tf, ta)); b.addActionListener(new TextMove(tf, ta)); setSize(300, 200); setVisible(true); } public static void main(String[] args){ Frame f = new MyNotebook(" Обработка ActionEvent"); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent ev){ System.exit(0); } }); } } class TextMove implements ActionListener{ private TextField tf; private TextArea ta; TextMove(TextField tf, TextArea ta){ this.tf = tf; this.ta = ta; } public void actionPerformed(ActionEvent ae){ ta.append(tf.getText()+"\n"); } }
Пример 1.3. Файл MyNotebook.java
Обработчик события является вложенным классом.
import java.awt.*; import java.awt.event.*; class MyNotebook extends Frame{ private TextField tf; private TextArea ta; MyNotebook(String title) { super(title); tf = new TextField("Вводите текст", 50); add(tf, BorderLayout.NORTH); ta = new TextArea(); ta.setEditable(false); add(ta); Panel p = new Panel(); add(p, BorderLayout.SOUTH); Button b = new Button("Перенести"); p.add(b); tf.addActionListener(new TextMove()); b.addActionListener(new TextMove()); setSize(300, 200); setVisible(true); } public static void main(String[] args){ Frame f = new MyNotebook(" Обработка ActionEvent"); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent ev){ System.exit(0); } }); } // Вложенный класс class TextMove implements ActionListener{ public void actionPerformed(ActionEvent ae){ ta.append(tf.getText()+"\n"); } } }
Пример 2. Файл ScribbleTest.java
import java.awt.*; import java.awt.event.*; public class ScribbleTest extends Frame{ public ScribbleTest(String s){ super(s); ScrollPane pane = new ScrollPane(); pane.setSize(300, 300); add(pane, BorderLayout.CENTER); Scribble scr = new Scribble(this, 500, 500); pane.add(scr); Panel p = new Panel(); add(p, BorderLayout.SOUTH); Button b1 = new Button("Красный"); p.add(b1); b1.addActionListener(scr); Button b2 = new Button("Зеленый"); p.add(b2); b2.addActionListener(scr) ; Button b3 = new Button("Синий"); p.add(b3); b3.addActionListener(scr) ; Button b4 = new Button("Черный"); p.add(b4); b4.addActionListener(scr); Button b5 = new Button("Очистить"); p.add(b5); b5.addActionListener(scr); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); pack(); setVisible(true); } public static void main(String[] args){ new ScribbleTest(" \"Рисовалка\""); } } class Scribble extends Component implements ActionListener, MouseListener, MouseMotionListener{ protected int lastX, lastY, w, h; protected Color currColor = Color.black; protected Frame f; public Scribble(Frame frame, int width, int height){ f = frame; w = width; h = height; enableEvents(AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK); addMouseListener(this); addMouseMotionListener(this); } public Dimension getPreferredSize(){ return new Dimension(w, h); } public void actionPerformed(ActionEvent event){ String s = event.getActionCommand(); if (s.equals ("Очистить")) repaint(); else if (s.equals ("Красный")) currColor = Color.red; else if (s.equals("Зеленый")) currColor = Color.green; else if (s.equals("Синий")) currColor = Color.blue; else if (s.equals("Черный")) currColor = Color.black; } public void mousePressed(MouseEvent e){ if ((e.getModifiers() & MouseEvent.BUTTON1_MASK) == 0) return; lastX = e.getX(); lastY = e.getY(); } public void mouseDragged(MouseEvent e){ if ((e.getModifiers() & MouseEvent.BUTTON1_MASK) == 0) return; Graphics g = getGraphics(); g.setColor(currColor); g.drawLine(lastX, lastY, e.getX(), e.getY()); lastX = e.getX(); lastY = e.getY(); } public void mouseReleased(MouseEvent e){} public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseMoved(MouseEvent e){} }