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