`

Table表头(行号)演示(设置选中、颜色等)

阅读更多
import javax.swing.*;

import java.awt.*;
import javax.swing.table.*;
import javax.swing.event.*;

class TableRowHeaderDemo {
	public static void main(String[] args) {
		new TableRowHeaderFrame();
	}
}

class TableRowHeaderFrame extends JFrame {
	private static final long serialVersionUID = 1L;

	public TableRowHeaderFrame() {
		DefaultTableModel model = new DefaultTableModel(30, 10);
		JTable table = new JTable(model);
		/* 将table加入JScrollPane */
		JScrollPane scrollPane = new JScrollPane(table);
		/* 将rowHeaderTable作为row header加入JScrollPane的RowHeaderView区域 */
		scrollPane.setRowHeaderView(new RowHeaderTable(table, 40));
		this.getContentPane().add(scrollPane, BorderLayout.CENTER);
		this.setVisible(true);
		this.setSize(400, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

/**
 * 用于显示RowHeader的JTable,只需要将其加入JScrollPane的RowHeaderView即可为JTable生成行标题
 */
class RowHeaderTable extends JTable {
	private static final long serialVersionUID = 1L;
	public JTable refTable;// 需要添加rowHeader的JTable

	/**
	 * 为JTable添加RowHeader,
	 * 
	 * @param refTable
	 *            需要添加rowHeader的JTable
	 * @param columnWideth
	 *            rowHeader的宽度
	 */
	public RowHeaderTable(JTable refTable, int columnWidth) {
		super(new RowHeaderTableModel(refTable.getRowCount()));
		this.refTable = refTable;
		this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);// 不可以调整列宽
		this.getColumnModel().getColumn(0).setPreferredWidth(columnWidth);
		this.setDefaultRenderer(Object.class, new IsRowHeaderRenderer(refTable,
				this));// 设置渲染器
		this.setPreferredScrollableViewportSize(new Dimension(columnWidth, 0));
	}
}

/**
 * 用于显示RowHeader的JTable的渲染器,可以实现动态增加,删除行,在Table中增加、删除行时RowHeader
 * 一起变化。当选择某行时,该行颜色会发生变化
 */
class IsRowHeaderRenderer extends JLabel implements TableCellRenderer,
		ListSelectionListener {
	private static final long serialVersionUID = 1L;
	JTable reftable;// 需要添加rowHeader的JTable
	JTable tableShow;// 用于显示rowHeader的JTable

	public IsRowHeaderRenderer(JTable reftable, JTable tableShow) {
		this.reftable = reftable;
		this.tableShow = tableShow;
		// 增加监听器,实现当在reftable中选择行时,RowHeader会发生颜色变化
		ListSelectionModel listModel = reftable.getSelectionModel();
		listModel.addListSelectionListener(this);
	}

	public Component getTableCellRendererComponent(JTable table, Object obj,
			boolean isSelected, boolean hasFocus, int row, int col) {
		((RowHeaderTableModel) table.getModel()).setRowCount(reftable
				.getRowCount());// 设置行表头数量
		JTableHeader header = reftable.getTableHeader();
		this.setOpaque(true);
		setBorder(UIManager.getBorder("TableHeader.cellBorder"));// 设置为TableHeader的边框类型
		setHorizontalAlignment(CENTER);// 让text居中显示
		setBackground(header.getBackground());// 设置背景色为TableHeader的背景色
		if (isSelect(row)) { // 当选取单元格时,在row header上设置成选取颜色
			setForeground(Color.white);
			setBackground(Color.lightGray);
		} else {
			setForeground(header.getForeground());
		}
		setFont(header.getFont());
		setText(String.valueOf(row + 1));
		return this;
	}

	public void valueChanged(ListSelectionEvent e) {
		this.tableShow.repaint();
	}

	private boolean isSelect(int row) {
		int[] sel = reftable.getSelectedRows();
		for (int i = 0; i < sel.length; i++)
			if (sel[i] == row)
				return true;
		return false;
	}
}

/**
 * 用于显示表头RowHeader的JTable的TableModel,不实际存储数据
 */
class RowHeaderTableModel extends AbstractTableModel {
	private static final long serialVersionUID = 1L;
	private int rowCount;// 当前JTable的行数,与需要加RowHeader的TableModel同步

	public RowHeaderTableModel(int rowCount) {
		this.rowCount = rowCount;
	}

	public void setRowCount(int rowCount) {
		this.rowCount = rowCount;
	}

	public int getRowCount() {
		return rowCount;
	}

	public int getColumnCount() {
		return 1;
	}

	public Object getValueAt(int row, int column) {
		return row;
	}
}

 

分享到:
评论
1 楼 kinganpo 2011-08-21  

相关推荐

    js获取table中当前选择行号

    通过js获取table中当前选择的一行的行号,获取当前行号后可以进行对应的操作

    LabVIEW表格选中行的上色、改变背景颜色.rar

    但是,对于行的选中颜色,LabVIEW默认的设置并不提供直接的控制选项。 要实现选中行的上色和背景颜色变化,通常需要编写自定义VIs(虚拟仪器),利用LabVIEW的事件结构来响应用户的操作。以下是实现这一功能的一般...

    使用 JavaScript 获取 table 行号和列号

    在JavaScript编程中,表格(table)是网页布局和数据展示常用的一种元素。有时我们需要获取用户在表格中选中或点击的行号和列号,以便进行相应的操作或处理。这篇博客将详细介绍如何实现这一功能。 首先,让我们...

    Word文档如何添加行号Word文档添加行号设置方法.pdf

    在“行号”命令中,我们可以对行号进行一些快捷设置,如每页重编行号、禁止用于当前段落等。 示例效果 如图效果,是选中了“每页重编行号”。这将使每一页的行号都从1开始编号。 小结 添加行号是Word文档中一个...

    VC6.0显示行号和设置字体的工具

    VC6.0显示行号和设置字体的工具 1. 如果你的VC安装在C盘,请拷贝文件VC6LineNumberAddin.dll到如下目录: C:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns 2. 注册 双击VC6LineNumberAddin....

    ListCtrl设置单元格颜色

    除了基本的颜色设置,还可以通过自定义绘制(`EVT_LIST_CTRL_DRAW_ITEM`事件)来实现更复杂的样式,比如渐变色、图案填充等。这需要重写`OnDrawItem`方法,使用`DC`(设备上下文)对象来绘制单元格。 总的来说,...

    Excel导出多层表头

    3. **设置样式**:为了使多层表头更具可读性,可以调整字体大小、颜色和加粗等样式。选择表头单元格,使用“字体”、“字号”、“字体颜色”和“粗体”等选项来美化表头。 二、Excel导出多层表头 1. **数据区域...

    Jquery获得鼠标在Table上的行号列号,以及值

    在实际应用中,可能还需要考虑一些边界情况,例如用户输入的行号或列号是否超出范围,以及处理具有合并单元格的复杂表格等。不过,以上代码提供了一个基本的框架,可以帮助你开始实现“Jquery获得鼠标在Table上的...

    VC6.0显示行号、设置其他字体工具

    然而,对于初次接触或习惯于现代IDE的用户来说,VC6.0的一些界面设置可能不尽如人意,比如默认字体不够清晰,且不支持直接在编辑器边缘显示行号。针对这些问题,我们可以利用特定的工具进行优化,让VC6.0更加符合...

    CListCtrl设置不同行不同颜色,字体颜色

    在某些应用中,我们可能需要为`CListCtrl`的不同行设置不同的颜色或者字体颜色,以增强界面的可读性和视觉效果。本篇文章将详细介绍如何实现这一功能,以及如何指定行高和行宽。 首先,要为`CListCtrl`的不同行设置...

    VC6.0显示行号+设置字体工具+VC6助手

    "VC6.0显示行号+设置字体工具+VC6助手"这个压缩包文件恰好提供了这些增强功能。 首先,"VC6.0显示行号插件"解决了默认情况下无法直接查看代码行号的问题。行号对于代码阅读和调试至关重要,特别是当涉及到多行代码...

    vue elementUI table 自定义表头和行合并的实例代码

    在这个实例中,我们可以通过设置一个headerDatas对象数组,该数组包含每个表头的配置信息,例如label属性用于指定表头显示的文本,width属性用于指定表头宽度等。然后通过v-for指令在&lt;el-table-column&gt;组件上循环...

    CRichEditView显示行号的代码

    CRichEditView显示行号的代码详解 ...代码中使用了CRichEditView控件、设置边距、使用Memory DC和绘制行号等技术点。通过本文,我们可以轻松地在CRichEditView中显示行号,以便于用户快速定位和编辑文本。

    VB RichTextBox 每行文字设置不同颜色

    `Text`属性用于获取或设置控件中的文本内容,`SelectionStart`用于设定光标位置,`SelectionLength`用于设定选中文本的长度,而`SelectionColor`则可以用来改变选中文本的颜色。 要为每行设置不同颜色,我们需要...

    给richTextbox 指定的行数 设置单独的颜色

    `SelectionStart`用于设置光标位置,`SelectionLength`确定选中文本的长度,而`SelectionColor`则用于设置选中文本的颜色。 下面是一个基本的实现步骤: 1. **遍历文本行**:首先,我们需要遍历`richtextbox`中的...

    带有行号显示功能的JTable

    自己写的一个继承自JTable的带有行号显示功能的表格,支持增删,设置行高等动态操作。

    行号 VS c# 代码

    - **自定义行号样式**:除了简单的开启或关闭行号外,还可以进一步调整行号的字体大小、颜色等样式设置,以满足个性化需求。 - **使用插件增强功能**:除了内置功能外,还可以考虑安装第三方插件来增强行号显示的...

    VC显示行号

    除了基本的行号显示,Visual Studio还提供了其他增强代码阅读性的功能,例如代码折叠(可以隐藏部分代码块以减少屏幕上的内容),颜色高亮(不同类型的代码使用不同的颜色以提高可读性),以及代码大纲视图(查看...

    RichTextBox 增加行号功能

    在Windows应用程序开发中,`RichTextBox`控件是一种常用的文本编辑和显示组件,它支持丰富的文本格式,如字体、颜色、样式等。然而,`RichTextBox`默认并不提供行号功能,开发者通常需要自己实现这一功能。这个话题...

    .xaml设置显示行号

    .xaml设置显示行号

Global site tag (gtag.js) - Google Analytics