Пример обработки события с использованием реализации интерфейса.



import java.awt.event.*;import java.applet.Applet;import java.awt.Graphics; public class SimpleClick extends Applet implements MouseListener { StringBuffer buffer; public void init() {         addMouseListener(this);         buffer = new StringBuffer();   addItem("initializing... "); } public void start() {   addItem("starting... "); } public void stop() {   addItem("stopping... "); } public void destroy() { addItem("preparing for unloading..."); } void addItem(String newWord) {   System.out.println(newWord);   buffer.append(newWord);   repaint(); } public void paint(Graphics g) {    g.drawRect(0, 0, getSize().width - 1, getSize().height - 1);    g.drawString(buffer.toString(), 5, 15); }// Остальные методы интерфейса реализуются как пустые методы public void mouseEntered(MouseEvent event) { } public void mouseExited(MouseEvent event) { } public void mousePressed(MouseEvent event) { } public void mouseReleased(MouseEvent event) { }     public void mouseClicked(MouseEvent event) {            addItem("click! ");      }}

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

public class Scribble2 extends Applet { int last_x, last_y; public void init() { this.addMouseListener(new MyMouseAdapter()); this.addMouseMotionListener(new MyMouseMotionAdapter());    Button b = new Button("Clear"); b.addActionListener(new MyActionEventListener()); this.add(b); }class MyMouseAdapter extends MouseAdapter { public void mousePressed(MouseEvent e) {    last_x = e.getX(); last_y = e.getY(); }}class MyMouseMotionAdapter extends MouseMotionAdapter   { public void mouseDragged(MouseEvent e) {   Graphics g = getGraphics();  int x = e.getX(), y = e.getY();   g.setColor(Color.black);   g.drawLine(last_x, last_y, x, y);   last_x = x; last_y = y; }}class MyActionEventListener implements ActionListener { public void actionPerformed(ActionEvent e) {          Graphics g = getGraphics();         g.setColor(getBackground());         g.fillRect(0, 0, getSize().width, getSize().height); } }}

Пример обработки события с использованием вложенного анонимного класса.

public class Scribble3 extends Applet { int last_x, last_y; public void init() {   this.addMouseListener(new MouseAdapter() {         public void mousePressed(MouseEvent e) {      last_x = e.getX();    last_y = e.getY();         }   });   this.addMouseMotionListener(new MouseMotionAdapter() {    public void mouseDragged(MouseEvent e) {         Graphics g = getGraphics();         int x = e.getX(), y = e.getY();         g.setColor(Color.black);         g.drawLine(last_x, last_y, x, y);         last_x = x; last_y = y;    }    });    Button b = new Button("Clear");    b.addActionListener(new ActionListener() {    public void actionPerformed(ActionEvent e) {               Graphics g = getGraphics();        g.setColor(getBackground());        g.fillRect(0, 0, getSize().width, getSize().height);    }   });  this.add(b); }}

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

Пример 2.2. Рисование в окне

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.Vector;

 

public class DrawLines extends JApplet {

int xDown, yDown; // координаты нажатия клавиши

int xPrev, yPrev;     // предыдущие координаты конца линии

Vector lines;              // массив координат линий

public void init() {

   lines = new Vector();

        MouseListener ml = new MouseAdapter(){

          public void mousePressed(MouseEvent e) {

            xPrev = e.getX();    yPrev = e.getY();

       }

   public void mouseReleased(MouseEvent e) {

      xDown = e.getX();      yDown = e.getY();

      int k = e.getClickCount();

      System.out.println(k);

      if ( k < 2)  {

         Rectangle p=new Rectangle(xPrev, yPrev, xDown-xPrev, yDown-yPrev);

         lines.addElement(p);

    }

    else    lines.removeAllElements();

    repaint();     }};

    addMouseListener(ml);

}

public void paint(Graphics g) {

   Dimension appSize = getSize();

   g.setColor(Color.yellow);

   g.fillRect(0,0,appSize.width, appSize.height);

   g.setColor(Color.black);

  int size = lines.size();

  for ( int i = 0; i < size; i++ )  {

      Rectangle p=(Rectangle)lines.elementAt(i);

      g.drawLine(p.x, p.y, p.x+p.width, p.y+p.height);

  }

}

public static void main(String[] args) {

  JFrame frame = new JFrame ("Пример");

  DrawLines appl = new DrawLines();

  appl.init();  appl.start();

  frame.getContentPane().add(appl);

  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  frame.setSize(800, 300);

  frame.setVisible(true);

}

}

 

А теперь попробуем выполнить обработку событий при движении мыши. Просто добавим в метод init код:

 

MouseMotionListener mm = new MouseMotionAdapter()  {

    public void mouseDragged(MouseEvent e)    {

        xDown = e.getX();     yDown = e.getY();

Rectangle p=new Rectangle(xPrev,yPrev,xDown-xPrev, yDown-yPrev);

         lines.addElement(p);

         xPrev = xDown; yPrev = yDown;

        repaint();

    }

  };

  addMouseMotionListener(mm);

 

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


Дата добавления: 2018-04-15; просмотров: 269; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!