修改JTable中某一单元格的颜色
信息资料来源:http://www.diybl.com/course/3_program/java/javajs/2007923/73156.html
不过原作者的代码并未实现其需求,在47、48行加上else cell.setBackground(Color.WHITE);即可正确实现。
修改后的完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | 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)
分类:
JAVA / awt/swing
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2021-03-01 关于e.getMessage()获取的报错信息