修改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 }

效果图如下:

 

 转自:修改JTable中某一单元格的颜色 - 可微 - 博客园 (cnblogs.com)

 

posted @ 2022-03-01 10:03  信铁寒胜  阅读(993)  评论(0编辑  收藏  举报