概述
最近在实现操作系统分页式存储管理演示程序时实现了设置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<columnCount;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<rowCount;i++)
for(int j=0;j<columnCount;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的全部内容,希望文章能够帮你解决具有不同颜色单元格的JTable所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复