修改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 }
效果图如下:
转自: