⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 whiteboard.java

📁 java网络编程方面的源码,其中有一个整合的聊天室,比较不错,建议大家下载练习,配合java网络编程技术内幕看
💻 JAVA
字号:
/* * Java Network Programming, Second Edition * Merlin Hughes, Michael Shoffner, Derek Hamner * Manning Publications Company; ISBN 188477749X * * http://nitric.com/jnp/ * * Copyright (c) 1997-1999 Merlin Hughes, Michael Shoffner, Derek Hamner; * all rights reserved; see license.txt for details. */import java.io.*;
import java.awt.*;
import java.awt.event.*;

public class Whiteboard extends Canvas implements Recipient {
  public Whiteboard () {
    setBackground (new Color (255, 255, 204));
    enableEvents (AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK);
  }

  protected MessageOutput messageOut;
  
  public void setMessageOutput (MessageOutput messageOut) {
    this.messageOut = messageOut;
  }

  public Dimension getPreferredSize () {
    return new Dimension (200, 150);
  }

  protected void processEvent (AWTEvent event) {
    if (event instanceof MouseEvent) {
      switch (event.getID ()) {
        case MouseEvent.MOUSE_PRESSED:
          mousePressed ((MouseEvent) event);
          break;
        case MouseEvent.MOUSE_DRAGGED:
          mouseDragged ((MouseEvent) event);
          break;
        case MouseEvent.MOUSE_RELEASED:
          mouseReleased ((MouseEvent) event);
          break;
        default:
          super.processEvent (event);
          break;
      }
    }
  }

  protected void mousePressed (MouseEvent event) {
    transmit (event.getX (), event.getY ());
  }

  protected void mouseDragged (MouseEvent event) {
    scribble (event.getX (), event.getY ());
    transmit (event.getX (), event.getY ());
  }

  protected void mouseReleased (MouseEvent event) {
    scribble (event.getX (), event.getY ());
    transmit (event.getX (), event.getY ());
    try {
      messageOut.send ();
    } catch (IOException ignored) {
    }
  }

  protected int oldX, oldY;
  
  protected void transmit (int x, int y) {
    try {
      messageOut.writeInt (oldX = x);
      messageOut.writeInt (oldY = y);
    } catch (IOException ignored) {
    }
  }

  protected void scribble (int x, int y) {
    Graphics gfx = getGraphics ();
    if (gfx != null) {
      gfx.drawLine (oldX, oldY, x, y);
      gfx.dispose ();
    }
  }

  public MessageOutput getMessageOutput () {
    return new DeliveryOutputStream (this);
  }

  public void receive (DataInputStream dataIn) {
    Graphics gfx = getGraphics ();
    if (gfx != null) {
      try {
        int oldX = dataIn.readInt (), oldY = dataIn.readInt ();
        while (dataIn.available () > 0) {
          int x = dataIn.readInt (), y = dataIn.readInt ();
          gfx.drawLine (oldX, oldY, x, y);
          oldX = x;
          oldY = y;
        }
      } catch (IOException ignored) {
      }
      gfx.dispose ();
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -