Ja det är väl inget enkelt projekt du gett dig in på precis Som jag ser det borde du ha det mesta av logiken liggandes i separata klasser och inte i gui.
Klassen för en gui kretsen kan se ut något sådant här till exempel:
public class CircuitGUI {
private Circuit circuit; // Din krets som har all logik
private Point location; // Gui kretsens x, y
private Dimension size; // Gui kretsens storlek
// Annat som behövs, färg kanske...etc
// Konstruktor
public CircuitGUI(Circuit c)
{
circuit = c;
}
public int getId()
{
return c.getId();
}
public void draw(Graphics g)
{
// Rita med hjälp av grafikobjektet
}
public boolean isWithin(Point p)
{
// Kolla om p är inom ritade ytan, använd location och size
}
public void move(Point p)
{
location.x = p.x;
location.y = p.y;
}
public void update()
{
// Kolla circuit state, uppdatera medlemsvariabler
// eventuellt kör draw igen
}
}
Du har en sorts loop i gui delen:
1. paint ritar upp allt första gången
2. Något händer, ändras eller ett musklick, kolla igenom komponenterna och kolla om något var inom punkten
3. Uppdatera det som behövs
4. Kalla på repaint om det behövs
Du anropar alltså bara metoder i dina andra klasser för det mesta.
När ett musklick händer så letar du igenom och hittar kretsen med isWithin, du vet nu vilken krets det är och du gör det som ska göras och kör eventuellt repaint sedan för att visa vad som hänt.
Och du kommer säkert behöva göra så att guien lyssnar på status på kretsarna, så att guien vet att något hände och kan rita igen (observer..etc).
Om du inte vill rita kretsarna kanske varje krets kan vara en subklass av Panel eller något annat och du bara ritar en bild på den, då kan du nog ta emot musevent direkt i den klassen också.
Finns säkert andra på forumet som har bra idéer också, jag kommer nog tyvärr inte återkomma så ofta hit längre.
Lycka till med projektet !