带有行标题栏的表格
来源:互联网 发布:易语言玫瑰花表白源码 编辑:程序博客网 时间:2024/05/21 18:33
所谓的带有“行标题栏”就是带有固定列的表格。这种表格在swing中是经常使用到的,理由是:可以很好地呈现数据!
package 行标题栏;import javax.swing.*;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;import javax.swing.table.AbstractTableModel;import java.awt.*;import java.util.Vector; public class Example extends JFrame { public static void main(String[] args) { // TODO 自动生成的方法存根 Vector<String> columnNameV=new Vector<>(); columnNameV.add("日期"); for(int i=1;i<21;i++) { columnNameV.add("商品"+i); } Vector<Vector<Object>> tablevalues=new Vector<>(); for(int row=1;row<31;row++) { Vector<Object> rowV=new Vector<>(); rowV.add(row); for(int col=0;col<20;col++) { rowV.add((int)(Math.random()*1000)); } tablevalues.add(rowV); } final MfixedColumnTable pane=new MfixedColumnTable(columnNameV, tablevalues,1); Example frame=new Example(); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(300, 100,400,300); frame.getContentPane().add(pane,BorderLayout.CENTER); }} /*这里封装了一个"带有固定表格栏"的个性化"表格",下面是设计的全部代码!*/ class MfixedColumnTable extends JPanel { /* 以下是7个属性*/ private Vector<String> tableColumnName=new Vector<>(); private Vector<Vector<Object>> tableValueV=new Vector<>(); private int MfixedColumns=1; private fixedColumnTableModel fixModel; private JTable fixtable; private floatingColumnTableModel floatModel; private JTable floattable; /*以下是二个自己的表格模型*/ private class fixedColumnTableModel extends AbstractTableModel { @Override public int getRowCount() { // TODO 自动生成的方法存根 return tableValueV.size(); } @Override public int getColumnCount() { // TODO 自动生成的方法存根 return MfixedColumns; } @Override public Object getValueAt(int rowIndex, int columnIndex) { // TODO 自动生成的方法存根 return tableValueV.get(rowIndex).get(columnIndex); } public String getColumnName(int column) { return tableColumnName.get(column); } } private class floatingColumnTableModel extends AbstractTableModel { @Override public int getRowCount() { // TODO 自动生成的方法存根 return tableValueV.size(); //返回总行数. } @Override public int getColumnCount() { // TODO 自动生成的方法存根 return (tableColumnName.size()-MfixedColumns); //总行数减去固定列数就是可移动的列数. } @Override public Object getValueAt(int rowIndex, int columnIndex) { // TODO 自动生成的方法存根 return tableValueV.get(rowIndex).get(columnIndex+MfixedColumns); } public String getColumnName(int columnIndex) { return tableColumnName.get(columnIndex+MfixedColumns); } } /*一下是一个ListselectionListener*/ class MlistsectionListener implements ListSelectionListener { private boolean isFixedSelection=true; public MlistsectionListener(boolean isFixedSelection) { // TODO 自动生成的构造函数存根 this.isFixedSelection=isFixedSelection; } @Override public void valueChanged(ListSelectionEvent e) { // TODO 自动生成的方法存根 if(isFixedSelection) { int row=fixtable.getSelectedRow(); floattable.setRowSelectionInterval(row, row); } else { int row=floattable.getSelectedRow(); fixtable.setRowSelectionInterval(row, row); } } } /*一下是类的构造方法,这个方法在这里是很重要!*/ public MfixedColumnTable(Vector<String>tableColumnName,Vector<Vector<Object>> tableValues,int fixCount) { // TODO 自动生成的构造函数存根 this.setLayout(new BorderLayout()); /*赋值*/ this.tableColumnName=tableColumnName; this.tableValueV=tableValues; MfixedColumns=fixCount; /* 固定表格的设计*/ fixModel=new fixedColumnTableModel(); fixtable=new JTable(fixModel); ListSelectionModel selectionModel=fixtable.getSelectionModel(); selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); selectionModel.addListSelectionListener(new MlistsectionListener(true)); /* 移动表格的设计*/ floatModel=new floatingColumnTableModel(); floattable=new JTable(floatModel); ListSelectionModel selectionModel1=floattable.getSelectionModel(); selectionModel1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); MlistsectionListener listener=new MlistsectionListener(false); selectionModel1.addListSelectionListener(listener); /*这部是很重要的,"关闭自动调整模式,是使用水平滚动条的必要设置."*/ floattable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); /*建立视图*/ JScrollPane pane=new JScrollPane(); //将固定表格头放到窗体的左上角. pane.setCorner(JScrollPane.UPPER_LEFT_CORNER,fixtable.getTableHeader()); //建立视图. JViewport view=new JViewport(); //将固定表格添加到视图中. view.setView(fixtable); //设置视图和固定表格大小相同. view.setPreferredSize(fixtable.getPreferredSize()); //将视图添加到panel的"标题栏视图"中,这个是很重要很重要的.直接决定最终的界面效果. pane.setRowHeader(view); //将移动表格添加到"默认视图"中.作用和上面是差不多的.在这里是一定要有的. pane.setViewportView(floattable); this.add(pane,BorderLayout.CENTER); this.validate(); } } /*制作"带有固定列"的表格的设计 * 看了书之后可以做,但是我不明白原理!应该查一些资料. */
运行效果:
0 0
- 带有行标题栏的表格
- Java MFixedColumnTable (提供行标题栏的表格)
- 输出带有表头的表格
- 创建带有表格的PPT
- 页面生成带有合计的表格
- python生成带有表格的图片
- Android 自定义的一个带有标题栏的相对布局
- 表格01--用户自定义tableViewCell(带有xib文件的)
- java生成带有样式、表格、不定图片的word
- EXCEL打印表格时如何添加带有公司名称的水印
- 导出带有多个标签页的Excel表格代码
- 实现锁定上标题栏和左标题栏的table表格---最佳实践
- jsp页面带有多选框的grid表格,如何将勾选中的行记录所有列数据传送到后台。
- 表格--表格行的类
- 2015/8/19/横、竖、满屏/消除标题、标题栏/startActivityForResult(启动带有返回值的intent)/Intent
- 输出表格的第三行中带有A样式的元素值
- 带有分页排序功能的表格插件的使用(通过ajax获取后台数据)
- 通过rtf字符串往richTextBox中添加带有文字的表格
- Eclipse 安装 Python插件
- 关于DG配置备库无法Real-Time Apply,无法实时查询的一个案例
- JS里获取到for循环中i的实时值。
- Android中AIDL进程间通信
- 比赛分组问题(一)
- 带有行标题栏的表格
- 详解正则表达式
- Scripts to resize standby redolog files
- ios自定义UITabBar-仿写掌上英雄联盟的UITabBar
- PHP+MYSQL+AJAX 第二章 PHP入门
- 倒排索引算法的Java实现
- MySQL数据库的常用命令
- jquery获取表单元素select option的值,对select option操作
- 大数据应用时Oracle优化实例