2013-02-25 56 views
1

我一直在尋找解決方案來解決這個問題,而且我無法制作頭部和尾部,不知道如何讓我的桌子在沒有問自己的問題的情況下做彩色的行。用於JTable的單元格渲染器 - 彩色行

從我看過的每個地方我收集我需要使用單元格渲染器,但問題是我不知道如何將它應用於我自己的情況。

所以我有一個簡單的JTable 3列,我只是希望每行都以綠色,黃色或紅色高亮顯示,具體取決於單獨變量的值(表中未顯示)。

它看起來應該很簡單,但我不知道該怎麼做。如果它幫助我的表格被定義爲:

studentTableModel = new DefaultTableModel(new Object[]{"Name", "StudentNo", "Part"}, 0); 
jt_studentTable = new JTable(studentTableModel); 
jt_studentTable.getColumnModel().getColumn(2).setPreferredWidth(10); 
studentTableModel.addRow(new Object[]{"(empty)", "(empty)", "(empty)"}); 
JScrollPane jsp_tableScroller = new JScrollPane(jt_studentTable); 
jsp_tableScroller.setPreferredSize(new Dimension(200,190)); 
middleCentrePanel.add(jsp_tableScroller); 

表中的行根據組合框的選擇而變化。

在此先感謝。

+1

這個【答案】(http://stackoverflow.com/questions/14563799/jtable-cellrenderer-changes-backgroundcolor-of -cells-while-running/14565614#14565614)可以幫助你做你的細胞渲染。 – Amarnath 2013-02-25 16:39:15

+0

無關:[永遠不會調用component.setXXSize](http://stackoverflow.com/a/7229519/203657) – kleopatra 2013-02-25 16:58:03

+0

謝謝你鏈接到作品的答案 - 除了它只突出顯示它正在檢查的單元格。你知道我將如何去強調整行? – forcey123 2013-02-25 17:07:21

回答

7

JTable Cell Coloring

import java.awt.Color; 
import java.awt.Component; 
import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableCellRenderer; 


public class RowRendering { 

    private static Object[] columnName = {"Yes", "No"}; 
    private static Object[][] data = { 
      {"Y", "N"}, 
      {"N", "Y"}, 
      {"Y", "N"} 
    }; 


    public static void main(String[] args) { 
     Runnable r = new Runnable() { 

      @Override 
      public void run() { 

       JFrame frame = new JFrame(); 
       JTable table = new JTable(data, columnName); 
       table.getColumnModel().getColumn(0).setCellRenderer(new CustomRenderer()); 
       table.getColumnModel().getColumn(1).setCellRenderer(new CustomRenderer()); 

       frame.add(new JScrollPane(table)); 
       frame.setTitle("Rendering in JTable"); 
       frame.pack(); 
       frame.setVisible(true); 
      } 
     }; 

     EventQueue.invokeLater(r); 
    } 
} 


class CustomRenderer extends DefaultTableCellRenderer 
{ 
private static final long serialVersionUID = 6703872492730589499L; 

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

     if(row == 0){ 
      cellComponent.setBackground(Color.YELLOW); 
     } else if (row == 1){ 
      cellComponent.setBackground(Color.GRAY); 
     } else { 
      cellComponent.setBackground(Color.CYAN); 
     } 
     return cellComponent; 
    } 
} 
+2

Got it排序,謝謝你的幫忙。 – forcey123 2013-02-25 18:12:27

1

我只想根據單獨變量的值(不顯示在表中)以綠色,黃色或紅色高亮顯示每一行。

渲染器處理表中的數據。也就是說,組件只有在擁有完成這項工作所需的所有信息時才能自行繪製。

所以不知何故,你需要將信息添加到表中。這可以通過添加隱藏的第4列完成。然後,表格仍然可以訪問所需的信息。

那麼也許你可以使用Table Row Renderering中的建議。

1

或許這對你的作品:

class MyCellRenderer extends DefaultTableCellRenderer { 
    String separatedVariable; 
    public MyCellRenderer(String separatedVariable) { 
     this.separatedVariable = separatedVariable; 
     } 

     @Override 
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { 
      Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); 
      c.setBackground(Color.WHITE); 
      c.setForeground(Color.BLACK); 
       JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); 
      if (separatedVariable.equals("YOUR VALUE TO GREEN")) { 
       l.setBackground(Color.GREEN); 

       return l; 
      } else { 
        if (separatedValue.equals("YOUR VALUE TO YELLOW")) { 
          l.setBackground(Color.YELLOW); 
          return l; 
         } else if (separatedValue.equals("YOUR VALUE TO RED")) { 
          l.setBaground(Color.RED); 
          return l; 
         } 
       } 
       return c; 
     } 
} 
+0

嘿謝謝你的幫助,唯一的問題是該解決方案只會改變它正在檢查的單元格的顏色 - 我正在尋找更改該行中的所有單元格。你知道如何去做這件事嗎? – forcey123 2013-02-25 17:10:40

+0

你如何設置單元格渲染器? 嘗試像這樣設置: table.setCellRenderer(MyCellRenderer); – 2013-02-25 17:25:24