Frage zur Ampelsteuerung auf einem GUI

smartin123

Mitglied
Guten Abend,

ich hab mal wieder ein schönes Problem, wo ich keine Ahnung habe.

Innerhalbe eines JFrames ist eine JTable, wo die ersten 2 Spalten durch ein Model
gefüllt werden:
Code:
public class MyDefaultTableModel extends DefaultTableModel {

      public MyDefaultTableModel() {

         Vector v1 = new Vector();
         Vector v2 = new Vector();

         setDataVector(v1, v2);

      }

}
In diesem Model sind 2 Vectoren, ein Vector für Spaltennamen. Und der andere Vector um die Daten
in die JTable zu bekommen.

Soweit, so gut, das funktioniert einwandfrei.

Nun füge ich in Spalte 3 Ampeln hinzu:
jTable.getColumn("Spalte3").setCellRenderer(new TrafficLightRenderer());

mit Hilfe eines CellRenders.

Code:
public class TrafficLightRenderer extends JLabel implements TableCellRenderer {
   
   public TrafficLightRenderer(){
      setOpaque(true);
   }


   public Component getTableCellRendererComponent(JTable table, Object value,
         boolean isSelected, boolean hasFocus, int row, int column) {
      TrafficLight ampel = new TrafficLight("Ampelfarbe");

      ampel.setVisible(true);
      return ampel;
   }
TrafficLight ist eine Klasse, wo eine Ampel gezeichnet wird. Das ist auch kein Problem.
Für Ampelfarbe muss man, rot,gelb oder grün an den Konstruktor übergeben.

Leider wird mit dieser Methode die Farbe der Ampeln für alle Zeilen in der Spalte3 vorgegeben,
durch diese Methode:
(jTable.getColumn("Spalte3").setCellRenderer(new TrafficLightRenderer("grün"))icon_wink.gif

Nun zu meiner Frage:
Ich möchte die Ampel in Abhängigkeit von Daten des Datenvector v2 stellen.

Also die Ampel so zeichen, wie es in Spalte2 vorgegeben ist.

So sieht die Tabelle aus:
Code:
spalte1(id)          spalte2               Spalte3(AmpelObject)
1                        grün
2                        rot
3                        rot
4                        gelb
5                        grün

Wie würdet ihr vorgehen?

Wäre spitze, wenn jemand eine Idee hätte.
vg
 
Hallo,

mal zu deinem CellRenderer.
Da du ein Ampel-Object zurück gibst, brauchst du den CellRenderer nicht von der Klasse JLabel abzuleiten.

Gibt es die Möglichkeit die Farbe der Ampel außerhalb des Konstruktors zu setzen? Zum Beispiel mit setColor?
Falls ja, würde ich diese Methode verwenden und nicht jedesmal ein neues Object der Ampel anlegen.


Versuch es mal so
Java:
public class TrafficLightRenderer extends TrafficLight implements TableCellRenderer {
   



   public Component getTableCellRendererComponent(JTable table, Object value,
         boolean isSelected, boolean hasFocus, int row, int column) {
     
      String colorString = table.getValueAt(row, column-1).toString();
      setColor(colorString);
      return this;
   }

Das funktioniert allerdings nur, wenn es eine solche Methode wie setColor() in der Klasse TrafficLight gibt.

MFG

Sascha
 
Hi,

danke für deinen Tip. Ich habs genauso gemacht
und es funktioniert.

Schönen Abend noch
Martin
 
Zuletzt bearbeitet:
Zurück