具有不同颜色单元格的JTable

最近在实现操作系统分页式存储管理演示程序时实现了设置JTable对象单元格不同颜色效果。在网上也有这方面的一些提问和讨论,但很多论坛内都没有很好的解释或完整的程序。因此将这段程序贴出来,供大家学习和指正。

  在本例中,每个单元格的颜色随机生成。同时,为了能够在颜色背景上显示数据,实现了一个Color类的子类MyObject。该类封装了单元格颜色和显示内容。在TableCellRenderer中可以利用该类对象设置颜色,同时又能够显示内容。

 

import java.awt.Color;
import java.awt.Component;
import javax.swing.*;
import javax.swing.table.*;
class MyObject extends Color{
   private String value;
   MyObject(int r,int g,int b,String value){
      super(r,g,b);
      this.value=value;
   }
   public Color getColor(){
      return new Color(getRed(),getGreen(),getBlue());
   }
   public String toString(){
      return value;
   }
}
class MyTableCellRenderer extends JPanel implements TableCellRenderer {
   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,boolean hasFocus, int row, int column){
      setBackground((Color)value);
      removeAll();
      add(new JLabel(value.toString()));
      return this;
   }
}

class MyTableModel extends AbstractTableModel {
   private Object[][] cells;
   private String[] columnNames;

   @Override
   public String getColumnName(int col) {
      return columnNames[col];
   }

   @Override
   public Class getColumnClass(int col) {
      return cells[0][col].getClass();
   }

   public int getColumnCount() {
      return cells[0].length;
   }

   public int getRowCount() {
      return cells.length;
   }

   public Object getValueAt(int row, int col) {
      return cells[row][col];
   }

   @Override
   public void setValueAt(Object obj, int row, int col) {
      cells[row][col] = obj;
   }

   public MyTableModel(int rows, int cols, String[] columnNames) {
      cells = new Object[rows][cols];
      this.columnNames = columnNames;
      for (int i = 0; i < rows; i++) {
         for (int j = 0; j < cols; j++) {
            cells[i][j] = new java.awt.Color(255, 255, 255);
         }
      }
   }
}
class ColoredTable{
   private int columnCount=10;
   private int rowCount=50;
   private MyTableModel tableModel2;
   private JTable table;
   String[] columnNames2=new String[columnCount];
   public void go(){
      JFrame f=new JFrame("具有不同颜色单元格的JTable实例");
      f.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
      table=new JTable();
      for(int i=0;i         columnNames2[i]=""+i;
      tableModel2=new MyTableModel(rowCount,columnCount,columnNames2);
      table.setModel(tableModel2);
      table.setDefaultRenderer(java.awt.Color.class, new MyTableCellRenderer());
      table.setRowHeight(50);
      for(int i=0;i         for(int j=0;j            int r=(int)(Math.random()*255);
            int g=(int)(Math.random()*255);
            int b=(int)(Math.random()*255);
            Color color=new Color(r,g,b);
            tableModel2.setValueAt(new MyObject(r,g,b,""+i+","+j),i,j);
         }
      f.add(new JScrollPane(table));
      f.pack();
      f.setVisible(true);
   }
   public static void main(String args[]){
      new ColoredTable().go();
   }
}
 

你可能感兴趣的:(具有不同颜色单元格的JTable)