博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java MFixedColumnTable (提供行标题栏的表格)
阅读量:5237 次
发布时间:2019-06-14

本文共 5415 字,大约阅读时间需要 18 分钟。

可以以一列或多列为行标题栏。

预览:

代码:

package com.han;import java.awt.BorderLayout;import java.util.Vector;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JViewport;import javax.swing.ListSelectionModel;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;import javax.swing.table.AbstractTableModel;public class MFixedColumnTable extends JPanel {	/**	 * 	 */	private static final long serialVersionUID = -8001758880985479654L;	private Vector
columnNameV; // declare the table column name vector private Vector
> tableValueV; // declare the table value // vector private int fixedColumn = 1; // the fixed column number private JTable fixedColumnTable; private FixedColumnTableModel fixedColumnTableModel; private JTable floatingColumnTable; private FloatingColumnTableModel floatingColumnTableModel; private class FixedColumnTableModel extends AbstractTableModel { // inner class /** * */ private static final long serialVersionUID = 3935656415101599023L; @Override public int getRowCount() { // TODO Auto-generated method stub return tableValueV.size(); } @Override public int getColumnCount() { // TODO Auto-generated method stub return fixedColumn; } @Override public Object getValueAt(int rowIndex, int columnIndex) { // TODO Auto-generated method stub return tableValueV.get(rowIndex).get(columnIndex); } @Override public String getColumnName(int columnIndex) { return columnNameV.get(columnIndex); } } private class FloatingColumnTableModel extends AbstractTableModel { /** * */ private static final long serialVersionUID = -2481466672947191281L; @Override public int getRowCount() { return tableValueV.size(); } @Override public int getColumnCount() { return columnNameV.size() - fixedColumn; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return tableValueV.get(rowIndex).get(columnIndex + fixedColumn); } @Override public String getColumnName(int columnIndex) { return columnNameV.get(columnIndex + fixedColumn); } } private class MListSelectionListener implements ListSelectionListener { boolean isFixedColumnTable = true; public MListSelectionListener(boolean isFixedColumnTable) { this.isFixedColumnTable = isFixedColumnTable; } @Override public void valueChanged(ListSelectionEvent e) { // TODO Auto-generated method stub if (isFixedColumnTable) { int row = fixedColumnTable.getSelectedRow(); floatingColumnTable.setRowSelectionInterval(row, row); } else { int row = floatingColumnTable.getSelectedRow(); fixedColumnTable.setRowSelectionInterval(row, row); } } } public MFixedColumnTable(Vector
columnNameV, Vector
> tableValueV, int fixedColumn) { super(); setLayout(new BorderLayout()); this.columnNameV = columnNameV; this.tableValueV = tableValueV; this.fixedColumn = fixedColumn; // create fixedColumnTable fixedColumnTableModel = new FixedColumnTableModel(); fixedColumnTable = new JTable(fixedColumnTableModel); ListSelectionModel fixed = fixedColumnTable.getSelectionModel(); fixed.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); fixed.addListSelectionListener(new MListSelectionListener(true)); // create floatingColumnTable floatingColumnTableModel = new FloatingColumnTableModel(); floatingColumnTable = new JTable(floatingColumnTableModel); floatingColumnTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); ListSelectionModel floating = floatingColumnTable.getSelectionModel(); floating.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); floating.addListSelectionListener(new MListSelectionListener(false)); // create scrollPane JScrollPane scrollPane = new JScrollPane(); scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedColumnTable.getTableHeader()); JViewport viewport = new JViewport(); viewport.setView(fixedColumnTable); viewport.setPreferredSize(fixedColumnTable.getPreferredSize()); scrollPane.setRowHeaderView(viewport); // viewport 视口 scrollPane.setViewportView(floatingColumnTable); add(scrollPane, BorderLayout.CENTER); }}

然后,用一个测试提供行标题栏的表格的代码:

package com.han;import java.awt.BorderLayout;import java.util.Vector;import javax.swing.JFrame;/** * Provide a fixed column in a table *  * @author Gaowen *  */public class JTable4 extends JFrame {	/**	 * 	 */	private static final long serialVersionUID = 805308369080023303L;	public JTable4() {		super();		setTitle("提供行标题栏的表格");		setBounds(100, 100, 500, 400);		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		Vector
columnNameV = new Vector
(); columnNameV.add("日期"); for (int i = 1; i < 21; i++) { columnNameV.add("商品" + i); } Vector
> tableValueV = new Vector
>(); for (int row = 1; row < 31; row++) { Vector rowV = new Vector(); rowV.add(row); for (int col = 0; col < 20; col++) { rowV.add((int) (Math.random() * 1000)); } tableValueV.add(rowV); } final MFixedColumnTable panel = new MFixedColumnTable(columnNameV, tableValueV, 1); getContentPane().add(panel, BorderLayout.CENTER); } public static void main(String[] args) { // TODO Auto-generated method stub JTable4 frame = new JTable4(); frame.setVisible(true); }}
这是继前几个表格使用和操作的后续,讲解了提供行标题栏的表格的实现方法,以帮助读者拓宽表格的设计思路,同时这也是一种很适用的表格形式。

转载于:https://www.cnblogs.com/javaTest/archive/2012/04/23/2589179.html

你可能感兴趣的文章
linux后台运行和关闭SSH运行,查看后台任务
查看>>
cookies相关概念
查看>>
CAN总线波形中ACK位电平为什么会偏高?
查看>>
MyBatis课程2
查看>>
桥接模式-Bridge(Java实现)
查看>>
网络请求返回HTTP状态码(404,400,500)
查看>>
Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
查看>>
Mac下使用crontab来实现定时任务
查看>>
303. Range Sum Query - Immutable
查看>>
图片加载失败显示默认图片占位符
查看>>
【★】浅谈计算机与随机数
查看>>
解决 sublime text3 运行python文件无法input的问题
查看>>
javascript面相对象编程,封装与继承
查看>>
Atlas命名空间Sys.Data下控件介绍——DataColumn,DataRow和DataTable
查看>>
Java中正则表达式的使用
查看>>
算法之搜索篇
查看>>
新的开始
查看>>
java Facade模式
查看>>
NYOJ 120校园网络(有向图的强连通分量)(Kosaraju算法)
查看>>
Leetcode 226: Invert Binary Tree
查看>>