修改JTable中某一单元格的颜色

信息资料来源:http://www.diybl.com/course/3_program/java/javajs/2007923/73156.html

不过原作者的代码并未实现其需求,在47、48行加上else cell.setBackground(Color.WHITE);即可正确实现。

修改后的完整代码如下:

 1 import java.awt.*;
2 import java.awt.event.*;
3 import javax.swing.*;
4 import javax.swing.table.*;
5
6 public class TestTableCellColor extends JFrame {
7 private String[] colname = {"第1列","第2列","第3列","第4列","第5列"}; //表头信息
8 private String[][] data = new String[10][5]; //表内容
9
10 //界面组件----------------------//
11 private JScrollPane scroPanel = new JScrollPane(); //中底层滚动面板
12 private DefaultTableModel model; //列表默认TableModel
13 private JTable table;
14 int r=1, c=2;//用于控制变色区域
15
16 public TestTableCellColor() {
17 makeFace();
18 addListener();
19 showFace();
20 }
21
22 private void makeFace() {
23 //表内容数组 data[][] 赋值------------//
24 for(int i = 0; i < 10; i++) {
25 for(int j = 0; j < 5; j++) {
26 data[i][j] = "( " + (j+1) + ", " + (i+1) + " )";
27 }
28 }
29
30 table = new JTable(model = new DefaultTableModel(data,colname));
31 table.setEnabled(false);
32
33 //新建列表现器------------------------//
34 DefaultTableCellRenderer tcr = new DefaultTableCellRenderer() {
35 public Component getTableCellRendererComponent(JTable table, Object value,
36 boolean isSelected, boolean hasFocus, int row, int column) {
37 Component cell = super.getTableCellRendererComponent
38 (table, value, isSelected, hasFocus, row, column);
39 if(row==r && column==c && cell.isBackgroundSet())//设置变色的单元格
40 cell.setBackground(Color.GRAY);
41 else
42 cell.setBackground(Color.WHITE);
43
44 return cell;
45 }
46 };
47
48 //设置列表现器------------------------//
49 for(int i = 0; i < colname.length; i++) {
50 table.getColumn(colname[i]).setCellRenderer(tcr);
51 }
52
53 scroPanel.getViewport().setBackground(Color.WHITE);
54 scroPanel.getViewport().add(table);
55
56 //总体界面布局------------------------//
57 getContentPane().add(scroPanel, BorderLayout.CENTER);
58 }
59
60 private void showFace() {
61 setSize(500,400);
62 Toolkit tmpTK = Toolkit.getDefaultToolkit();
63 Dimension dime = tmpTK.getScreenSize();
64
65 setLocation(200,300);
66 setVisible(true);
67 }
68
69 private void addListener() {
70 this.addWindowListener(new WindowAdapter() { //添加窗口关闭事件
71 public void windowClosing(WindowEvent e) {
72 setVisible(false);
73 dispose();
74 System.exit(0);
75 }
76 });
77 }
78
79 public static void main(String args[]) {
80 //获取设置系统风格-------------------//
81 try {
82 String laf = UIManager.getSystemLookAndFeelClassName();
83 UIManager.setLookAndFeel(laf);
84 } catch (Exception e) {}
85
86 new TestTableCellColor();
87 }
88 }

效果图如下:

posted @ 2010-03-25 10:04  可微  阅读(2800)  评论(0编辑  收藏  举报