Scribble som Java Applet
Tema:
- Mushantering
- Graphics klassen
- Point klassen
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
/*
En Applet för Webanvändning
Sätt in den i en websida med följande html kod
<applet
code=ScribbleApplet.class
name=ScribbleApplet
width=320
height=200>
</applet>
*/
/*
----------------------------------------------------------
class ScribbleApplet
----------------------------------------------------------
OBS!
eftersom klassen heter ScribbleApplet måste filen heta
ScribbleApplet.java
*/
public class ScribbleApplet extends Applet
{
// initieraren körs alltid på en Applet
public void init()
{
// sätt en BorderLayout på appleten
this.setLayout(new BorderLayout());
// och sätt in ritpanelen i mitten
this.add( "Center", new MyDrawing() );
}
}
/*
----------------------------------------------------------
class MyDrawing
----------------------------------------------------------
En Panel variant med ritegenskaper...
*/
class MyDrawing extends Panel implements
MouseMotionListener, // för mouseDragged
MouseListener // för mouseReleased
// och mouseClicked
{
// senaste muskoordinater
// en Point klass är lättaste sättet att hålla reda på både x och y
private Point lastPoint = new Point( );
// ritar vi ??
private boolean isDrawing = false;
// konstruereren körs alltid då ett objekt av denna klass skapas
public MyDrawing()
{
// se till att vi reagerar på mushändelser
this.addMouseListener( this );
this.addMouseMotionListener( this );
// sätt en vit bakgrund
this.setBackground( Color.white );
}
// alla dessa måste finnas om vi inte vill köra anonyma
// funktioner, de behöver dock inte göra någonting
public void mouseMoved(MouseEvent e) { }
public void mousePressed(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
//----------------------------------------------------------
// vi klickade på panelen
//----------------------------------------------------------
public void mouseClicked(MouseEvent e)
{
// var det ett dubbelklick?
if (e.getClickCount() > 1)
{
// rita i så fall om panelen
this.repaint();
}
}
//----------------------------------------------------------
// i VB måste vi hantera musklick och musförflyttning separat
// i Java kombineras dessa i mouseDragged händelsen som sker när
// man flyttar musen med en knapp nedtryckt
//----------------------------------------------------------
public void mouseDragged(MouseEvent e)
{
// håller vi på och ritar?
if (isDrawing)
{
// kolla alla eventuella modifierare,
// t.ex. vilken musknapp vi använt
int modifier = e.getModifiers();
// kontrollerar om det var knapp 1 som blivit tryckt
if ( (modifier & MouseEvent.BUTTON1_MASK ) == modifier )
{
// sätt en blå förgrundsfärg
this.setForeground( Color.blue );
}
else
{
// sätt en röd förgrundsfärg
this.setForeground( Color.red );
}
// kontrollera shift tangenten
if ( e.isShiftDown() )
{
// sätt en svart förgrundsfärg
this.setForeground( Color.black );
}
// drag ett streck mellan föregående
// koordinater och nuvarande
this.getGraphics().drawLine(lastPoint.x ,
lastPoint.y ,
e.getPoint().x ,
e.getPoint().y
);
}
// sätt undan muskoordinaterna i en point
lastPoint = e.getPoint();
// vi har nu börjat rita...
// nästa gång denna händelse sker skan vi dra streck
isDrawing = true;
}
//----------------------------------------------------------
// Vi släppte den netryckta musknappen
//----------------------------------------------------------
public void mouseReleased(MouseEvent e)
{
// om vi släppt musen så skall vi sluta rita
isDrawing = false;
}
}
Resultatet
Klicka här för att provköra Appleten