Salve a tutti, sono un neo- programmatore in Java appena trasferito da c++ per la semplicità della programmazione GUI.

Tuttavia non capisco come trattare il repaint di modelli contenenti più oggetti grafici
nell' istante in cui i parametri di tali oggetti vengano cambiati.

Questo è il semplice programma (purtroppo buggato) che finora ho creato:
(qualcuno mi spieghi anche a parole come si risolvono problemi del genere)

------------------------------------------------------------------------------------
1^FILE, MAIN

import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;

public class THEGraphics
{


public static void main(String[] args)
{

class ModelComponent extends JComponent
{

public Pnt pnt1;
public Pnt pnt2;



public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;

pnt2.paintComponent(g2);
pnt1.paintComponent(g2);
}

public void CreateComponent()
{

pnt1 = new Pnt(50,50);
pnt2 = new Pnt(100,100);

}
public void ModifyComponent(int x, int y)
{

pnt2.moveTo(x,y);
}


public void ModifyComponent2()
{
pnt1.moveTo(200,200);
pnt2.moveTo(10,10);
}

}

final ModelComponent modello = new ModelComponent();
modello.CreateComponent();

class MousePressedListener implements MouseListener
{

public void mousePressed(MouseEvent event)
{

modello.ModifyComponent2();

System.out.println("Premuto");

}
//metodi che non fanno nulla
public void mouseReleased(MouseEvent event){}
public void mouseClicked(MouseEvent event){}
public void mouseEntered(MouseEvent event){}
public void mouseExited(MouseEvent event){}



}


MouseListener listener = new MousePressedListener();

modello.addMouseListener(listener);


JFrame frame = new JFrame();
frame.setSize(800,600);
frame.setTitle("OpenFem Model");


frame.add(modello);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setVisible(true);
}

}

-------------------------------------------------------------------------
2^ FILE

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JComponent;

public class Pnt extends JComponent
{

private Rectangle point;
private int DIM_POINT = 2;
private int X_POS;
private int Y_POS;

public Pnt()
{
point = new Rectangle(X_POS,Y_POS,
DIM_POINT,DIM_POINT);
}

public Pnt(int x,int y)
{
DIM_POINT = 2;//default
X_POS = x - DIM_POINT;
Y_POS = y - DIM_POINT;
point = new Rectangle(X_POS,Y_POS,
DIM_POINT,DIM_POINT);
}

public Pnt(int x,int y,int dim)
{
DIM_POINT = 2*( dim - 1 );
X_POS = x - dim;
Y_POS = y - dim;
point = new Rectangle(X_POS,Y_POS,
DIM_POINT,DIM_POINT);
}

public void ChangeDim(int dim)
{
DIM_POINT = dim;
}

public void paintComponent(Graphics g)
{
point = new Rectangle(X_POS,Y_POS,
DIM_POINT,DIM_POINT);
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.draw(point);
}

public int get_X_POS()
{
return X_POS;
}

public int get_Y_POS()
{
return Y_POS;
}

public int get_DIM_POINT()
{
return DIM_POINT;
}

public void set_X_POS(int x)
{
X_POS = x;
repaint();
}

public void set_Y_POS(int y)
{
Y_POS = y;
repaint();
}

public void set_DIM_POINT(int dim)
{
DIM_POINT = dim;
repaint();
}

public void moveBy(int dx, int dy)
{
point.translate(dx,dy);
repaint();
}

public void moveTo(int x, int y)
{
point.setLocation(x,y);
repaint();
}

}