提供行标题的表格(源码)

代码:

package exercise;
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 MifxedCoumntable extends JPanel {
 private Vector<String> coumnNameV;
 private Vector<Vector<Object>> tableValueV;
 private int fixedColumn=1;
 private JTable fixedCoumnTable;
 private JTable floatingCoumnTable;
 private class FixedColumnTableModel extends AbstractTableModel{
  public String getColumnCount(int c){
   return coumnNameV.get(c);
  }
  @Override
  public int getColumnCount() {
   // TODO Auto-generated method stub
   return fixedColumn;
  }
  @Override
  public int getRowCount() {
   // TODO Auto-generated method stub
   return tableValueV.size();
  }
  @Override
  public Object getValueAt(int arg0, int arg1) {
   // TODO Auto-generated method stub
   return tableValueV.get(arg0).get(arg1);
  }
 }
 private FixedColumnTableModel fixedcolumnTableModel;
 private class FloatingColumnTableModel extends AbstractTableModel{
  @Override
  public int getColumnCount() {
   // TODO Auto-generated method stub
   return coumnNameV.size()-fixedColumn;
  }
  @Override
  public int getRowCount() {
   // TODO Auto-generated method stub
   return tableValueV.size();
  }
  @Override
  public Object getValueAt(int rowIndex, int columnIndex) {
   // TODO Auto-generated method stub
   return tableValueV.get(rowIndex).get(columnIndex+fixedColumn);
  }
  public String getColumnName(int c){
   return coumnNameV.get(c+fixedColumn);
  }
 }
 private FloatingColumnTableModel floatingColumnTableModel;
 private class MlistSelectionListener implements ListSelectionListener{
  boolean isFixedColumnTable=true;
  public MlistSelectionListener(boolean is) {
   // TODO Auto-generated constructor stub
   this.isFixedColumnTable=is;
  }
  @Override
  public void valueChanged(ListSelectionEvent e) {
   // TODO Auto-generated method stub
   if(isFixedColumnTable){
    int row=fixedCoumnTable.getSelectedRow();
    fixedCoumnTable.setRowSelectionInterval(row,row);
   }else{
    int row=floatingCoumnTable.getSelectedRow();
    fixedCoumnTable.setRowSelectionInterval(row, row);
   }
  }
 }
 public MifxedCoumntable(Vector<String> co,Vector<Vector<Object>>ta,int fixedColumn){
  setLayout(new BorderLayout());
  this.coumnNameV=co;
  this.tableValueV=ta;
  this.fixedColumn=fixedColumn;
  fixedcolumnTableModel=new FixedColumnTableModel();
  fixedCoumnTable=new JTable(fixedcolumnTableModel);
  ListSelectionModel fixed =fixedCoumnTable.getSelectionModel();
  fixed.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  fixed.addListSelectionListener(new MlistSelectionListener(true));
  floatingColumnTableModel=new FloatingColumnTableModel();
  floatingCoumnTable=new JTable(floatingColumnTableModel);
  floatingCoumnTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  ListSelectionModel floating =floatingCoumnTable.getSelectionModel();
  floating.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  MlistSelectionListener listern=new MlistSelectionListener(false);
  floating.addListSelectionListener(listern);
  JScrollPane scrollPane=new JScrollPane();
  scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedCoumnTable.getTableHeader());
  JViewport viewport=new JViewport();
  viewport.setView(fixedCoumnTable);
  viewport.setPreferredSize(fixedCoumnTable.getPreferredSize());
  scrollPane.setRowHeaderView(viewport);
  scrollPane.setViewportView(floatingCoumnTable);
  add(scrollPane,BorderLayout.CENTER);
 }
}

package exercise;
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 {
    /**
     * 
     */
    public JTable4() {
        super();
        setTitle("提供行标题栏的表格");
        setBounds(100, 100, 500, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Vector<String> columnNameV = new Vector<String>();
        columnNameV.add("日期");
        for (int i = 1; i < 21; i++) {
            columnNameV.add("商品" + i);
        }
        Vector<Vector<Object>> tableValueV = new Vector<Vector<Object>>();
        for (int row = 1; row < 31; row++) {
            Vector<Object> rowV = new Vector<Object>();
            rowV.add(row);
            for (int col = 0; col < 20; col++) {
                rowV.add((int) (Math.random() * 1000));
            }
            tableValueV.add(rowV);
        }
        final MifxedCoumntable panel = new MifxedCoumntable(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);
    }
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值