2016-04-08 17 views
0

Ich arbeite an einem farbbasierten Datenbankprogramm, das Buchungen innerhalb einer Unterkunft basierend auf Farbe zeigt. Das Problem, das ich hatte, ist, dass der Tisch 367 Spalten hat (der Name der Unterkunft und dann alle Tage eines Jahres). Das Problem, das ich hatte, ist, dass ich nicht herausfinden kann, wie man die erste Spalte macht In der Zeile wird eine Zeichenfolge und der Rest eine Farbe angezeigt.Wie mache ich eine Zeile in JTable mit 367 Zellen, wo nur der erste Text und der Rest Farben hat

Ich machte einen grundlegenden Renderer, der Farben anzeigen sollte, aber ich weiß nicht, wie man es benutzt.

public class MyRenderer extends DefaultTableCellRenderer{ 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
     if (! table.isRowSelected(row)) 
     { 
      if(row == 2 && column == 2) 
       c.setBackground(new java.awt.Color(0, 0, 255)); 
      else 
       c.setBackground(table.getBackground()); 
     } 
     return c; 
    } 
} 

Wie würde ich dies mit einem JTable integrieren?

PS Ich habe eine Kopfzeile, die ich zeigen möchte, aber die Zeilen sollten zu Anfang leer sein. Wenn dann eine Taste gedrückt wird, sollte eine Zeile hinzugefügt werden. diese letzte Taste kann ich mir machen Ich brauche nur mit dem Zellrenderer helfen

Im Moment meine JTable wie folgt initialisiert: JTable table = new JTable();

Hat irgendwelche Tipps jemand haben?

+0

Legen Sie die Informationen, die Sie in der 'TableModel' möchten, bieten eine benutzerdefinierte' TableCellRenderer', die die 'value' und wandelt auf die gewünschte Farbe und legt den Hintergrund – MadProgrammer

+0

Als [Beispiel] (http nimmt: // stackoverflow.com/questions/30552644/how-do-i-color-individual-cells-of-a-jtable-based-on-the-value-in-the-cell/30553979#30553979) und [Beispiel] (http : //stackoverflow.com/questions/28082098/how-to-give-a-jtable-cell-different-background-colour/28082202#28082202) – MadProgrammer

Antwort

2

Ich vermute, es gibt zwei Staat für einen Tag, gebucht oder nicht. Also ist die value Boolean. Sie können Renderer nach Klassentypen festlegen. Zum Beispiel:

table.setDefaultRenderer(Boolean.class, new MyRenderer()); 

Damit wird Ihr Renderer verwendet nur, wenn value ein boolean ist.

public class MyRenderer extends DefaultTableCellRenderer{ 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

      if(value) 
       c.setBackground(/*Color for booked days*/); 
      else 
       c.setBackground(table.getBackground()); 

     return c; 
    } 
} 
+0

Es wird ein paar Farben je nach wie viele Personen gebucht, so dass ich würde stattdessen nur einen int verwenden? – BRHSM

+0

Sie können 'enum' für verschiedene Situationen verwenden. 'public enum RoomState {AVALIABLE, GEBUCHT, GEBUCHT2}' – rdonuk

+0

Und entscheiden Sie die Farbe in Cellrenderer abhängig vom Zustand. – rdonuk