Modelleisenbahn - Kontroll-Tafel programmieren

joe_roemer

Mitglied
Hallo Leute,
ich bin ein Modelleisenbahn-Fan, der sich gerade eine Java-Anwendung schreibt, welche die Modellbahn (automatisch) steuert.
Um das ganze etwas ansprechender zu gestalten, soll der Gleisplan der Anlage grafisch dargestellt werden.
Es soll also eine Art Kontroll-Tafel entstehen, die Lage und Zustand der Gleise darstellt, wie im richtigen Stellwerk.
Hierfür möchte ich das Gleisbild aus einzelnen kleinen Bildern zusammensetzen, wie ein Raster.
Als Beispiel:
Eins dieser kleinen Bilder aus dem Raster stellt eine auf abbiegen gestellte Weiche dar.
Wird diese Weiche nun auf geradeaus gestellt, möchte ich diese kleine Teilbild durch ein anderes Bild einer geraden Weiche ersetzen.
So entsteht dann der optische Eindruck im Gleisbild, die Weiche wäre gestellt worden.

Als weiteres Beispiel ein rotes Signal.
Dieses rote Signal wird ebenfalls durch ein Teilbild im Raster dargestellt.
Wird nun dieses Signal von der Steuerung auf grün gestellt, wird das Teilbild im Raster durch ein Bild eines grünen Signals ersetzt.

Ich hoffe , ich konnte einigermassen vermitteln, was ich möchte.

Wie kann ich in Java ein Gesamtbild aus vielen kleinen Teilbildern bzw. images (gifs o. ä.) zusammensetzen und auch bestimme Teile durch andere Teilbilder ersetzen, sprich im Raster ansprechen bzw. austauschen.
Quasi wie auf einem Schachbrett, wo die Spielfiguren von Feld zu Feld wandern.

Wie ich ein Bild lade und darstelle weiß ich bereits, nur wie ich die Handhabung eines solchen Rasters aus vielen Bilder handhaben soll, weiß ich nicht.

Vielleicht gibt es auch ähnlich gelagerte Beispiele.
Kann mir jemand helfen?

Gruß, Alex
 

Ebenius

Top Contributor
Wie stellst Du denn ein Bild dar? Üblicher Weise leitet man eine eigene Klasse von JComponent ab und überschreibt die Methode [c]paintComponent(Graphics)[/c]. Innerhalb dieser zeichnet man das Bild auf das mitgelieferte Graphics-Objekt. Wenn Du das auch so machst, dann ist der triviale Ansatz doch der, die Komponente nicht ein Bild sondern alle Bilder zeichnen zu lassen. Dazu müsste sich die Komponente also alle Bilder und deren Ort merken. Wenn ein Bild ausgetauscht wird, dann muss [c]repaint()[/c] auf der Komponente aufgerufen werden.

Reicht das schon als Idee, oder hast Du konkrete Bedenken, oder andere Ansätze?

Ebenius
 

joe_roemer

Mitglied
Hi Ebenius,
so ähnlich habe ich mir das vorgestellt.
Nur wie meinst Du das mit dem Merken, wo welches Bild steht?
Quasi "zu Fuß" oder stellt Java da was bereit?
Meinst Du ich müsste bei jeder Änderung das komplette Bild "repainten" oder kann ich einzelne austauschen?
In Sachen Gui und Grafik bin ich Anfänger.

Gruß, Alex
 

noobadix

Bekanntes Mitglied
Du müsstest wohl jedes Element des Gleisplanes als Objekt/Klasse implementieren, welches informationen über u.a. Position speichert und eben die paintComponent-Methode überschreibt. Ein Gleisplan, eine Sammlung dieser Bauelemente, könnte als Array repräsentiert werden und du bräuchtest eine Methode bauDich(), die das Array durchgeht und die Koordinaten abfragt. Ein Vorschlag für ein Signal:

Java:
class Signal extends JComponent{

   boolean gruen=false;
   int x,y;

   public Signal(int xArg, int yArg){
      setPreferredSize(new Dimension(10,10));
      x=xArg;
      y=yArg
   }

   public int getX(){ return x;}
   public int getY(){ return y;}

   public void setGruen(boolean arg){
      gruen=arg;
      repaint();
   }

   public void paintComponent(Graphics){
      Color c = Color.red;
      if(gruen) c=Color.green;
      g.setColor(c);
      g.fillOval(0,0,10,10);
   }
}

Du brauchst also keine Bilder wechseln, sondern "sagst" dem Objekt mit setGruen(boolean arg) wie es aussehen soll, das in dieser Methode implementierte repaint() bewirkt...na du weißt schon ^^

Gruß N.
 
Zuletzt bearbeitet:

Neue Themen


Oben