2016-03-22 14 views
3

Ich muss die Hintergrundfarbe meiner Zeilen festlegen. Zum Beispiel gibt es diese Zeilen:Legen Sie die Hintergrundfarbe der Zeilen mit demselben Datum fest

29.12.14 Absences 
12.01.15 Absences 
12.01.15 Accounts 

Nun, wenn es zwei Reihen mit dem gleichen Datum (oben 12.01.15) sie sollten die gleiche Hintergrundfarbe in der GUI.

String week = new String(); 
    int weekCounter = 0; 
    int colour = 0; 

    // Append the rows 
    for (ExcelRow row : printOutRows) { 
     if (weekCounter == 0){ 
     week = row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString(); 
      colour = 0; 
     } 
     else if (row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString().equals(week)){ 
      colour = 0; 
     } 
     else { 
      week = row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString(); 
      colour = 1; 
     } 

     model.addRow(new Object[] { 
       row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString(), 
       row.getExcelCells().get(1).getExcelCell().getRichStringCellValue().getString(), 
       row.getExcelCells().get(2).getExcelCell().getRichStringCellValue().getString(), 
       row.getExcelCells().get(3).getExcelCell().getNumericCellValue()}); 

     if (colour == 0){ 
      table.setSelectionBackground(Color.RED); 
     } 
     else{ 
      table.setSelectionBackground(Color.LIGHT_GRAY); 
     } 
     weekCounter ++; 

    } 

Ich habe den obigen Code versucht, aber alle Zeilen in der JTable haben einen weißen Hintergrund. Wie kann ich mein Ziel erreichen?

+2

Auswahl Hintergrund ist wahrscheinlich nicht der Weg zu gehen. Versuchen Sie, den Zellenhintergrund für die fraglichen Zeilen festzulegen. – Thomas

+0

Sie können Ihre Logik in einen TableCellRenderer einfügen und den Renderer in der Tabelle festlegen. setBackground (Color c) sollte im Renderer funktionieren. – Endery

+1

Bitte lesen Sie über [Renderer/Editor-Konzept in der Tabelle] (https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender) –

Antwort

1

Sie können es tun, wenn Sie in der ersten Spalte eine Farbvariable hinzufügen. In meinem Beispiel habe ich einen Booleschen Wert verwendet, aber es würde auch funktionieren, wenn Sie etwas anderes verwenden würden.

Im ersten Teil bereite ich Ihren Code vor, wie Sie es vorher gemacht haben, aber als erstes die Farbe.
Danach entferne ich die erste Spalte aus der Sicht, so dass Sie es nicht sehen. Aber es ist immer noch da.
Zuletzt rendere ich die Ausgabe, die der Variablen entspricht, die wir früher festgelegt haben.

String week = ""; 
boolean colorSwitch = false; 

for (ExcelRow row : printOutRows) { 
    if (!row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString().equals(week)){ 
     week = row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString(); 
     colorSwitch = !colorSwitch; 
    } 

    model.addRow(new Object[] { 
     colorSwitch, 
     row.getExcelCells().get(0).getExcelCell().getRichStringCellValue().getString(), 
     row.getExcelCells().get(1).getExcelCell().getRichStringCellValue().getString(), 
     row.getExcelCells().get(2).getExcelCell().getRichStringCellValue().getString(), 
     row.getExcelCells().get(3).getExcelCell().getNumericCellValue() 
    }); 

} 

// remove first column from the view (the one with the boolean value in it)  
TableColumnModel tcm = table.getColumnModel(); 
tcm.removeColumn(tcm.getColumn(0)); 

// render the table according to the color.  
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){ 
    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { 
     super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); 

     if ((Boolean) table.getModel().getValueAt(row, 0)) { 
      setBackground(Color.BLACK); 
      setForeground(Color.WHITE); 
     } else { 
      setBackground(table.getBackground()); 
      setForeground(table.getForeground()); 
     }  

     return this; 
    } 
    }); 
Verwandte Themen