26
Toepassing: schets- editor Canvas om op te tekenen Tools Controls Menu

Toepassing: schets-editor Canvas om op te tekenen Tools Controls Menu

  • View
    215

  • Download
    1

Embed Size (px)

Citation preview

Toepassing: schets-editorCanvas om op

te tekenen

Tools

Controls

Menu

Schets: klasse-ontwerp (1)Component

Container Panel

Window

Applet

Frame

JApplet

JFrame

JComponent JPanel

SchetsApplet

SchetsApplic

SchetsCanv

SchetsComponent

Container Panel

Window

Applet

Frame

JApplet

JFrame

JComponent JPanel

class SchetsApplic extends JFrame{ © SchetsApplic( )

{ ……add( new SchetsApplet(…) … );}public static void main (String [] p){ new SchetsApplic().setVisible(true);}

}

Schets: klasse-ontwerp (2)

SchetsApplet

SchetsApplic

SchetsCanv

SchetsComponent

Container Panel

Window

Applet

Frame

JApplet

JFrame

JComponent JPanel

class SchetsApplet extends JApplet{ SchetsCanv canvas;

Tool currentTool;public void init(){ canvas = new SchetsCanv();

……add(canvas, ….CENTER); …………}

}

Schets: klasse-ontwerp (3)

SchetsApplet

SchetsApplic

SchetsCanv

SchetsComponent

Container Panel

Window

Applet

Frame

JApplet

JFrame

JComponent JPanel

class SchetsCanv extends JPanel{ Schets schets;

Color penkleur = Color.BLACK; © SchetsCanv(){ schets = new Schets(); }public void paint(Graphics g){ schets.teken(g); }

}

Schets: klasse-ontwerp (4)

SchetsApplet

SchetsApplic

SchetsCanv

SchetsComponent

Container Panel

Window

Applet

Frame

JApplet

JFrame

JComponent JPanel

class Schets{ BitMap bitmap;

© Schets(){ bitmap = new BitMap(……); }public void teken(Graphics g){ g . drawImage(bitmap,0,0,…); }

}

Opbouw GUIclass SchetsApplet extends JApplet{ public void init() { canvas = new SchetsCanv();

}

……add( canvas , ….CENTER);

canvas.addMouseListener (this);canvas.addMouseMotionListener (this);canvas.addKeyListener (this);

……add( maakToolBox ( ), ….WEST );……add( maakCtrlPanel ( ), ….SOUTH );……add( maakMenuBar ( ), ….NORTH );

Collection<ToolAktie> t = maakToolAkties();Collection<ControlAktie> c = maakControlAkties();

t ct , c

implements ML, MML, KLSchetsCanv canvas; Tool currentTool;

Swing-akties

AbstractAction

AboutAktie

ControlAktie

ToolAktie

kan reagerenop een aktie

actionPerformed

kent extraeigenschappen

van de aktiegetValueputValue

maakt Actionsmet standaard-eigenschappen(naam, icon, …)

ActionListener

Action

Schets-akties (1)AboutAktie

ControlAktie

ToolAktie

AbstractAction

ActionListener

Action

class AboutAktie extends AbstractAction{

}

public void actionPerformed(ActionEvent e){ …showMessageDialog(…, “SchetsEditor versie 1”, …);}

© AboutAktie ( ){ super ( “About” );}

Schets-akties (2)AboutAktie

ControlAktie

ToolAktie

AbstractAction

ActionListener

Action

class ControlAktie extends AbstractAction{

}

public void actionPerformed(ActionEvent e){ }

© ControlAktie (String naam ){ super ( naam );

}

String naam = this.getValue(Action.NAME);if (naam.equals(“clear”)) canvas.clear(); else …

SchetsCanv canvas;

canvas = c;

, SchetsCanv c )

Schets-akties (3)AboutAktie

ControlAktie

ToolAktie

AbstractAction

ActionListener

Action

class ToolAktie extends AbstractAction{

}

public void actionPerformed(ActionEvent e){ }

© ToolAktie (String naam ){ super ( naam );

}

applet . setCurrentTool (tool);

SchetsApplet applet; Tool tool;

applet = a; tool = t;

, Applet a, Tool t ), Icon ic ), ic );

Opbouw GUIclass SchetsApplet extends JApplet{ public void init() { canvas = new SchetsCanv();

}

……add( canvas , ….CENTER);

canvas.addMouseListener (this);canvas.addMouseMotionListener (this);canvas.addKeyListener (this);

……add( maakToolBox ( ), ….WEST );……add( maakCtrlPanel ( ), ….SOUTH );……add( maakMenuBar ( ), ….NORTH );

Collection<ToolAktie> t = maakToolAkties();Collection<ControlAktie> c = maakControlAkties();

t ct , c

implements ML, MML, KLSchetsCanv canvas; Tool currentTool;

Maken van de aktiesclass SchetsApplet extends JApplet{ private Collection<ControlAktie> maakControlAkties() {

}

LinkedList<ControlAktie> res;res = new LinkedList<ControlAktie>();

implements ML, MML, KL

return res;

res.add( new ControlAktie( ) );res.add( new ControlAktie( ) );

“clear” , canvas“rotate” , canvas

Maken van de aktiesclass SchetsApplet extends JApplet{ private Collection<ToolAktie> maakToolAkties() {

}

LinkedList<ToolAktie> res;res = new LinkedList<ToolAktie>();

implements ML, MML, KL

return res;

res.add( new ToolAktie( ) );res.add( new ToolAktie( ) );res.add( new ToolAktie( ) );res.add( new ToolAktie( ) );res.add( new ToolAktie( ) );res.add( new ToolAktie( ) );

“pen”, this“lijn” , this“rh” , this“vul” , this“tekst” ,

this“gum”,

this

, new PenTool(), new LijnTool(), new RectTool(), new FillRTool(), new TekstTool(), new GumTool()

ToolSchetsApplet

Opbouw GUIclass SchetsApplet extends JApplet{ public void init() { canvas = new SchetsCanv();

}

……add( canvas , ….CENTER);

canvas.addMouseListener (this);canvas.addMouseMotionListener (this);canvas.addKeyListener (this);

……add( maakToolBox ( ), ….WEST );……add( maakCtrlPanel ( ), ….SOUTH );……add( maakMenuBar ( ), ….NORTH );

Collection<ToolAktie> t = maakToolAkties();Collection<ControlAktie> c = maakControlAkties();

t ct , c

implements ML, MML, KLSchetsCanv canvas; Tool currentTool;

Listenersclass SchetsApplet extends JApplet{

}

public void mousePressed(MouseEvent e){

}

implements ML, MML, KLSchetsCanv canvas; Tool currentTool;

currentTool . muisIngedrukt( e.getPoint() );canvas ,

public void mouseReleased(MouseEvent e){ currentTool . muisLosgelaten( canvas , e.getPoint() );}………………

dat moet een Tooldus kunnen!

Schets-tools (1)

Tool

interface Tool {

}

void muisIngedrukt ( SchetsCanv c, Point p) ;

void muisLosgelaten ( SchetsCanv c, Point p) ;

void muisVersleept ( SchetsCanv c, Point p ) ;

void letterIngetikt ( SchetsCanv c, char k) ;

Schets-tools (2)

ToolStartpunt

Tool

abstract class StartpuntTool implements Tool {

}

void muisIngedrukt ( SchetsCanv c, Point p){

startpunt = p;}

Point startpunt ;

Schets-tools (3)

Tool

TekstTool

StartpuntTool

class TekstTool extends StartpuntTool {

}

void letterIngetikt ( SchetsCanv canv, char c){

}

Graphics g = canv . getGraphics();g . drawString( “”+c, startpunt.x, startpunt.y);startpunt.x += ……c….width;

void muisVersleept ( SchetsCanv c, Point p) { }void muisLosgelaten( SchetsCanv c, Point p) { }

Schets-tools (4)

Tool

TekstTool

TweepuntTool

StartpuntTool

abstract class TweepuntTool extends StartpuntTool {

}

void muisVersleept ( SchetsCanv canv, Point p){

}

Graphics g = canv . getGraphics();this . tekenContour(g, startpunt, p);

abstract void tekenContour(Graphics g, Point p1, Point p2) ;

void muisLosgelaten ( SchetsCanv canv, Point p){ Graphics g = canv . getBitmapGraphics(); this . tekenFiguur(g, startpunt, p);}

void tekenFiguur(Graphics g, Point p1, Point p2) { tekenContour(g, p1, p2);}

Schets-tools (5)

Tool RectTool

TekstTool

TweepuntTool

StartpuntTool

class RectTool extends TweepuntTool {

}

void tekenContour ( Graphics g, Point p1, Point p2 ){

}

Dimension afstand = puntAfstand(p1, p2);g . drawRect( p1.x, p1.y , afstand.w, afstand.h );

Schets-tools (6)

Tool RectTool FillTool

TekstTool

TweepuntTool

StartpuntTool

class FillTool extends RectTool {

}

void tekenFiguur ( Graphics g, Point p1, Point p2 ){

}

Dimension afstand = puntAfstand(p1, p2);g . fillRect( p1.x, p1.y , afstand.w, afstand.h );

Schets-tools (7)

Tool

LijnTool

RectTool FillTool

TekstTool

TweepuntTool

StartpuntTool

class LijnTool extends TweepuntTool {

}

void tekenContour ( Graphics g, Point p1, Point p2 ){

}

g . drawLine( p1.x, p1.y, p2.x, p2.y );

Schets-tools (8)

Tool

LijnTool

RectTool

PenTool

FillTool

TekstTool

TweepuntTool

StartpuntTool

class PenTool extends LijnTool {

}

void muisVersleept ( SchetsCanvas c, Point p ){

}

this . muisLosgelaten (c, p);this . muisIngedrukt (c, p);

Schets-tools (9)

Tool

LijnTool

RectTool

PenTool

FillTool

GumToolTekstTool

TweepuntTool

StartpuntTool

class GumTool extends PenTool {

}

void tekenContour ( Graphics g, Point p1, Point p2 ){

}

g2 . setStroke( new BasicStroke(7) );g2 . setColor (Color.WHITE );super . tekenContour (g2, p1, p2);

Graphics2D g2 = (Graphics2D) g ;

Tijdenlijk / permanent tekenenclass SchetsCanv extends JPanel{ Schets schets; Color penkleur;

}

class Schets{ BitMap bitmap;

}

void paint(Graphics g){ schets.teken(g);}

void teken(Graphics g){ g.drawImage(bitmap, …)}Graphics getBitmapGraphics()

{ g = schets.getBitmapGraphics(); g.setColor(penkleur); return g;}

Graphics getBitmapGraphics (){ return bitmap.getGraphics();}

Swing+ Schets klassen

AboutAktie

ControlAktie

ToolAktie

AbstractAction

ActionListener

ActionAbstractAction

ActionListener

Action

Component

Container Panel

Window

Applet

Frame

JApplet

JFrame

JComponent JPanel

SchetsApplet

SchetsApplic

SchetsCanv

SchetsComponent

Container Panel

Window

Applet

Frame

JApplet

JFrame

JComponent JPanel

Tool

LijnTool

RectTool

PenTool

FillTool

GumToolTekstTool

TweepuntTool

StartpuntTool

Icon ImageIcon

ToolIcon

TekstIcon

TweepuntIcon

Icon ImageIcon