Ciao a tutti,
sono alle prime armi con java e mi stavo divertendo a personallizare un esercizio trovato sempre online.
Si tratta di una specie di lavagna che tenendo premuto il tasto del mouse scrve sul JPanel.
Naturalmente finn quì tutto ok... anche perchè il codice è copiato dall'esempio....
Questo è l'esempio:
codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JFrame.*;
public class Painter extends JPanel {
private int startXPoint = 0; // coordinata x di partenza
private int endXPoint = 0; // coordinata x di arrivo
private int startYPoint = 0; // coordinata y di partenza
private int endYPoint = 0; // coordinata y di
boolean paint = false;
//ascoltatore del moto del mouse
class mMotionListener implements MouseMotionListener {
public void mouseDragged(MouseEvent e) {
//aggiorna le coordinate
startXPoint = endXPoint;
startYPoint = endYPoint;
endXPoint = e.getX();
endYPoint = e.getY();
//disegna
Painter.this.repaint();
}
public void mouseMoved(MouseEvent e) {
// aggiorna le coordinate
startXPoint = endXPoint;
startYPoint = endYPoint;
endXPoint = e.getX();
endYPoint = e.getY();
}
}
// ascoltatore dei pulsanti del mouse
class mListener implements MouseListener {
// i seguenti metodi sono richiesti dalla
// interfaccia MouseListener anche se non
// vengono utilizzati
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
// pulsante premuto
public void mousePressed(MouseEvent e) {
//attiva la modalità di disegno
paint = true;
}
// pulsante rilasciato
public void MouseReleased(MouseEvent e) {
// disattiva la modalità di disegno
paint = false;
}
}
// Costruttore della classe principale
public Painter() {
super();
MouseListener ml = new mListener();
addMouseListener(ml);
MouseMotionListener mml = new mMotionListener();
addMouseMotionListener(mml);
}
public void paint(Graphics g) {
// se è attiva la modalòità disegno, traccia una riga
if (paint) {
g.drawLine(startXPoint,startYPoint,endXPoint,endYPoint);
}
}
public static void main(String argv[]) {
Painter p = new Painter();
JFrame f = new JFrame("Mia Prova Lavagna");
f.getContentPane().add(p);
f.setSize(500, 400);
f.setVisible(true);
}
}
dicevo tutto bene.. fino a quando non ho deciso...
cerco di imparare qualcosa personalizzandolo...
La mia idea era..
di creare un tasto che dopo averlo premuto mi cancella il tratto come una gomma sempre al passaggio del mouse...
Quindi ho aggiunto un pulsante... in questo modo....
codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JFrame.*;
public class Painter extends JPanel {
private int startXPoint = 0; // coordinata x di partenza
private int endXPoint = 0; // coordinata x di arrivo
private int startYPoint = 0; // coordinata y di partenza
private int endYPoint = 0; // coordinata y di
boolean paint = false;
//ascoltatore del moto del mouse
class mMotionListener implements MouseMotionListener {
public void mouseDragged(MouseEvent e) {
//aggiorna le coordinate
startXPoint = endXPoint;
startYPoint = endYPoint;
endXPoint = e.getX();
endYPoint = e.getY();
//disegna
Painter.this.repaint();
}
public void mouseMoved(MouseEvent e) {
// aggiorna le coordinate
startXPoint = endXPoint;
startYPoint = endYPoint;
endXPoint = e.getX();
endYPoint = e.getY();
}
}
// ascoltatore dei pulsanti del mouse
class mListener implements MouseListener {
// i seguenti metodi sono richiesti dalla
// interfaccia MouseListener anche se non
// vengono utilizzati
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
// pulsante premuto
public void mousePressed(MouseEvent e) {
//attiva la modalità di disegno
paint = true;
}
// pulsante rilasciato
public void MouseReleased(MouseEvent e) {
// disattiva la modalità di disegno
paint = false;
}
}
// Costruttore della classe principale
public Painter() {
super();
MouseListener ml = new mListener();
addMouseListener(ml);
MouseMotionListener mml = new mMotionListener();
addMouseMotionListener(mml);
}
public void paint(Graphics g) {
// se è attiva la modalòità disegno, traccia una riga
if (paint) {
g.drawLine(startXPoint,startYPoint,endXPoint,endYPoint);
}
}
public static void main(String argv[]) {
Painter p = new Painter();
JFrame f = new JFrame("Mia Prova Lavagna");
///************** AGGIUNTO DA MEEEEEEEEE ***************///
JButton pulsante = new JButton("Cancella");
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add((p), BorderLayout.NORTH);
f.getContentPane().add((p), BorderLayout.EAST);
f.getContentPane().add((p), BorderLayout.WEST);
f.getContentPane().add((p), BorderLayout.CENTER);
f.getContentPane().add((pulsante), BorderLayout.SOUTH);
f.pack();
///************************************************///
//f.getContentPane().add(p);
f.setSize(500, 400);
f.setVisible(true);
}
}
e diciamo che già solo questo mi dà un pò di problemi visto che una volta premuto il pulsante cancella e ritorno sulla lavagna sopra in alto mi compare un'altro pulsante.
Naturalmente quest'ultimo pulsante non è proprio un pulsante ma una dovrebbe essere una copia fotografica del punto in cui è passato il mouse.
Vabbè... questo ne sono consapevole... .anche se non ho presente qual'è la soluzione.
Quello che mi interessa proprio di più è come aggiungere un metodo che mi possa cambiare il metodo
g.drawLine(startXPoint,startYPoint,endXPoint,endYP oint);
in uno che mi cancella.... sempre se così che si faccia.... e se sono nella direzione giusta...
Confido in un vostro aiuto...
grazie
Ciao Giuseppe R.