Originariamente inviato da andbin
Senza vedere il codice che hai scritto è molto improbabile riuscire a capire cosa non va.
Hai le idee chiare sul "painting" nei componenti? Il vero "contesto" di disegno è solo nel paintComponent() (per i componenti Swing). In altri momenti (es. in un mouseDragged)
potresti prendere il Graphics e disegnare ma ... non è "permanente", proprio perché il contesto di disegno in cui si dovrebbe ridisegnare il contenuto del componente è nel paintComponent().
il codice l'ho talmente tanto sporcato che alla fine son tornato al punto di partenza. te lo incollo ugualmente giusto per farti un'idea dello scheletro dell'applicazione.
questa è la lavagna
codice:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class WhiteBoard extends JPanel implements MouseListener, MouseMotionListener {
private int startX, startY, endX, endY;
public WhiteBoard() {
this.setBackground(Color.white);
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
}
@Override
public void mouseDragged(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("Mouse Dragged: "+arg0.getX() +" "+arg0.getY());
endX = arg0.getX();
endY = arg0.getY();
}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("Mouse Pressed: "+arg0.getX() +" "+arg0.getY());
startX = arg0.getX();
startY = arg0.getY();
endX = arg0.getX();
endY = arg0.getY();
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("Mouse Released: "+arg0.getX() +" "+arg0.getY());
}
}
questa invece è una forma che voglio disegnare sulla lavagna (in questo caso una linea)
codice:
import java.awt.Color;
import java.awt.Graphics;
public class Line extends Shape{
public Line(int x1, int y1, int x2, int y2){
super(x1,y1,x2,y2);
}
public void setX1(int x1){
this.x1 = x1;
}
public void setX2(int x2){
this.x2 = x2;
}
public void setY1(int y1){
this.y1 = y1;
}
public void setY2(int y2){
this.y2 = y2;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.black);
g.drawLine(x1,y1,x2,y2);
}
}
Shape estende JComponent ma si limita a inizializzare le 4 coordinate
thx per la risposta