添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

网上搜索的多为整列渲染,摸门不着,甚是苦恼。琢磨出一种“逐格”渲染的方法,供象我一样曾经苦恼过的朋友参考。

一、先写一个“渲染”类,继承自DefaultTableCellRenderer

此类要渲染一个表,表中单元格存放图片或文本的本地路径(即你想让单元格显示文本或图片)。每个单元格里都有一个标签(JLabel,文本或图片显示在标签上),当然,也可以是按钮等组件。根据不同的文件扩展名,在标签上加载不同内容。
渲染表格时,系统应该是逐格扫描,因此,此类中重写的方法
getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
的参数也有如下解释:
JTable table:要渲染的表,在使用此类的对象时要和所要渲染的表关联,因此表(对象)就会传入此类的对象中;
Object value:扫描到的某单元格的值;
int row, int column:扫描到的某单元格的行、列索引。

public class PicAndTextTabCellRenderer extends DefaultTableCellRenderer {
	JLabel jLabel;
	String ext;                                // 单元格值的扩展名如:txt、jpg等
	String s;                                  // 文本文件内容
	ImageIcon oriIcon;                         // 由文件路径生成的源图标
	ImageIcon resultIcon;                      // 由大图处理后的“结果图标”
	public PicAndTextTabCellRenderer() {
		jLabel = new JLabel();
	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		ext = FileUtil.getExtension((String)value); // 自己写的获取扩展名方法
		if (ext.equals("txt")) {                              // 如果单元格内容为纯文本(txt)
			jLabel.setIcon(null);                             // “打扫”按钮上的图标
			jLabel.setText("");                               // “打扫”按钮上的文本
			jLabel.setVerticalAlignment(SwingConstants.NORTH);// 文本考上显示
			s = FileUtil.getStringFromDisk((String)value);
			jLabel.setText("<html>" + s + "</html>");         // 在标签面上自动换行
		} else if (ext.equals("jpg") || ext.equals("png")) {  // 图片只允许两种格式:jpg、png
			jLabel.setIcon(null);
			jLabel.setText("");
			jLabel.setVerticalAlignment(SwingConstants.CENTER);
			oriIcon = new ImageIcon((String)value);
			resultIcon = FileUtil.scaledIcon(oriIcon);        // 自己写的方法,由源图获取加工后的小图标
			jLabel.setIcon(resultIcon);
		} else {
			jLabel.setIcon(null);                             // 此清除很重要
			jLabel.setText("");
		return jLabel;

这个类描述的是如何渲染“一个单元格”,根据单元格的行、列(int row, int column)索引定位到一个单元格,再根据该单元格的值(Object value)决定如何渲染。个性化主要在这里表现出来。

二、再以“逐列”渲染的方式运用该类的对象

下面是一个供调用的“渲染”方法,只用提供一个参数:表,也就是:你要渲染哪个表,接下来怎么渲染“交给我”!
按列数逐列渲染,而列内又是逐个单元格渲染,这就实现了所有单元格的个性化渲染。

public static void renderBigFileTab(JTable jTable) {
	PicAndTextTabCellRenderer r;
	int colCount = jTable.getColumnCount(); // 列数
	for (int i = 1; i < colCount; i++) {    // 从第二列开始渲染(列渲染个性化,也可以是所有列)
		r = new PicAndTextTabCellRenderer();
		jTable.getColumnModel().getColumn(i).setCellRenderer(r);

代码:
jTable.getColumnModel().getColumn(i).setCellRenderer®;
将表对象jTable与渲染类对象r关联起来,相当于将表对象传递给了渲染类的对象,该对象获得了表,便可以从中“抽取”某个单元格的值,进而做单元格内的“文章”。
以上代码中,单元格内可以是标签、按钮等不同组件,渲染的内容可以是文字、图片、背景颜色等,可根据自己的需求对代码做相应调整。

渲染器用来绘制表格中的单元格渲染器也可以从表格中提取每个单元格的方法,所以,渲染器也被称为绘制器,其实,当一个表格能够在容器中显示出来,是依靠系统默认的渲染器来绘制的,而且是一个单元格,一个单元格绘制的,所以哥它可以单独的将某个单元格提取出来,也可以针对表格中任意的单元格进行编辑,这也是渲染器的最大用处之一。 下面通过例子来演示渲染器来渲染表格中不同行的颜色。 package c
JTable内容、外观、事件响应在很大程度上是由渲染器与编辑器控制的。 具体说来,渲染器负责单元格的外观比如前景色、背景色,以及单元格提示;编辑器负责单元格内容和事件响应。编辑器默认为文本框形式,也可以使用下拉菜单、按钮、单选按钮等形式。 定制的渲染器必须实现TableCellRenderer接口并实现getTableCellRendererComponent方法。在该方法中,可以指定渲染器的文字、单元格提示、颜色、字体等。注意,此处的文字仅为显示的内容,不是单元格的实际数据。
想用JTABLE做一个报表,目前遇到来问题是表头的合并和单元格合并,同时希望代码实现简单易用 表头合并,网上找了一个例子符合这个要求(https://blog.csdn.net/Beingccccc/article/details/90600940) 但是网上的单元格合并例子,代码复杂,希望能向上面的例子一样简单 自己根据之前的表头合并例子,稍微修改后,实现单元格合并 将之前的ComplexHeaderUI类稍加修改成ComplexTableUI就可以使用了 ![上效果图](https://img-.
原文链接:http://blog.sina.com.cn/s/blog_7f1c8c710101hdpf.html 最近自己尝试着模仿着实现一款非常有名的进销库存管理系统(智慧记)里面的一个功能。功能如下下图所示。 JTable tableA的第一列(品名规格)放的是自定义JPanel控件,JPanel上面放的是JTextfield和JButton,点击每一行第一列...
  一直用web写程序,最近有同学交我帮忙写个java软件,写前端时用了swing,发现swing里面的小细节非常多,比如列表,表格的动态更新什么的,细节很重要,一个不小心整个界面都崩溃,显示不出来。   由于我写的软件需要定时刷新界面,所以需要对JTable进行实时更新,对于动态更新其实最简单的,就是用 Vector 做 table 的模型,只要改变 Vector 中的数据,updateUI,...
CSDN-Ada助手: 恭喜您写下了第20篇博客!标题“Statementd对象做方法参数,方法内部是否关闭?No operations allowed after statement closed.”非常引人注目。您对这个问题进行了深入研究,这对于那些在使用Statement对象时遇到类似问题的开发者们来说肯定非常有帮助。 在下一步的创作中,我建议您可以进一步探讨如何优化使用Statement对象的方法,以避免出现“No operations allowed after statement closed.”的错误。您可以分享一些实用的技巧和经验,帮助读者更好地理解如何正确关闭Statement对象或者避免在关闭之后继续使用它们。 同时,我也鼓励您在博客中提供相关代码示例和详细的解释,以帮助读者更好地理解问题的本质和解决方法。期待您继续创作出更多有深度、有实用价值的博客文章。加油! Fragment has not been attached yet Fragment 套 Fragment weixin_52199532: 思考能力值得学习 mysql 用Navicat建表,提示syntax to use near ‘)‘ at;如何消除→? kid1412_Ciel: 谢谢 帮大忙了 Fragment has not been attached yet Fragment 套 Fragment hc5054: