codice:
public class Lavagna extends Canvas {
private int width;
private int height;
private int sideWidth;
private Image sfondo;
private boolean sfondoCaricato;
private boolean disegna;
private int strumentoSelezionato;
private int start_x;
private int start_y;
private int x;
private int y;
public Lavagna(int height, int width, int sideWidth) {
this.width = width;
this.height = height;
this.sideWidth = sideWidth;
disegna = false;
sfondoCaricato = false;
sfondo = null;
setLocation(sideWidth,0);
setSize(width-sideWidth,height/2);
setBackground(Color.white);
GestoreDisegni gestoreDisegni = new GestoreDisegni(this);
addMouseListener(gestoreDisegni);
addMouseMotionListener(gestoreDisegni);
}
public void paint (Graphics g) {
if (sfondo!=null) {
g.drawImage(sfondo,0,0,width,height,this);
}
else {
super.paint(g);
if (disegna) {
switch (strumentoSelezionato) {
case LavagnaPanel.STRUMENTO_PENNELLO:
g.drawLine(start_x,start_y,x,y);
}
}
}
}
public void setSfondo(Image sfondo) {
this.sfondo = sfondo;
}
public void setDisegna (boolean disegna) {this.disegna = disegna;}
public void setStrumento (int strumento) {
strumentoSelezionato = strumento;
}
public void setStartX (int x) {start_x = x;}
public void setStartY (int y) {start_y = y;}
public void setX (int x) {this.x = x;}
public void setY (int y) {this.y = y;}
// * * * * * * * * * * * * * * * * * * * * * * * * * *
private class GestoreDisegni implements MouseListener,MouseMotionListener {
private boolean disegna;
private Lavagna lavagna;
private Graphics g;
private int start_x;
private int start_y;
public GestoreDisegni (Lavagna l) {
lavagna = l;
g = lavagna.getGraphics();
disegna = false;
//DEBUG
System.out.println(g==null);
}
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
if (e.getButton()==1) {
lavagna.setDisegna(true);
lavagna.setStartX(e.getX());
lavagna.setStartY(e.getY());
}
}
public void mouseReleased(MouseEvent e) {
lavagna.setDisegna(false);
}
public void mouseMoved(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseDragged(MouseEvent e){
lavagna.setX(e.getX());
lavagna.setY(e.getY());
lavagna.repaint();
}
}
}
alla costante STRUMENTO_PENNELLO potete sostituire 1, se pensate di compilare la classe. Il problema si presenta nella classe privata GestoreDisegni