JAVA之表格

表格实现的功能是,固定的日期栏,移动的商品栏,选中日期行,相应的选中商品行,同样选中商品行,相应的选中日期行





import java.awt.BorderLayout;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Writer;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.MulticastSocket;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLConnection;
import java.net.UnknownHostException;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Iterator;
import java.util.Random;
import java.util.TreeSet;
import java.util.Vector;

import javax.swing.AbstractListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JViewport;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableRowSorter;

import java.sql.*;

public class test extends JFrame{
	
	private fixTable fixModel;
	private floatTable floatModel;
	private JTable tableFix;
	private JTable tableFloat;
	private int fixColNum = 1;
	private Vector colName;
	private Vector<Vector> rowName;
	
	public test(){
		init();
	}
	
	public class fixTable extends AbstractTableModel{//创建左边的固定表格模型
		@Override
		public int getColumnCount() {
			// TODO Auto-generated method stub
			return fixColNum;
		}

		@Override
		public int getRowCount() {
			// TODO Auto-generated method stub
			return rowName.size();
		}

		@Override
		public Object getValueAt(int arg0, int arg1) {
			// TODO Auto-generated method stub
			return rowName.get(arg0).get(arg1);
		}
		
		@Override
		public String getColumnName(int col){//没有这个,初始化列名也无法显示,默认为A。B。。。的大写字母
			return (String) colName.get(col);
		}
	}
	
	public class floatTable extends AbstractTableModel{//创建右边的移动表格模型
		private TreeSet<Object> model = new TreeSet<Object>();
		@Override
		public int getColumnCount() {
			// TODO Auto-generated method stub
			return colName.size() - fixColNum;
		}

		@Override
		public int getRowCount() {
			// TODO Auto-generated method stub
			return rowName.size();
		}

		@Override
		public Object getValueAt(int rowIndex, int columnIndex) {
			// TODO Auto-generated method stub
			return rowName.get(rowIndex).get(columnIndex + fixColNum);
		}
		
		@Override
		public String getColumnName(int col){
			return (String) colName.get(col + fixColNum);
		}
	}
	
	private class listSelecteListener implements ListSelectionListener{//创建list的监听事件 
		private boolean isFix;
		
		public listSelecteListener(boolean isFix){
			this.isFix = isFix;
		}
		
		@Override
		public void valueChanged(ListSelectionEvent e) {
			// TODO Auto-generated method stub
			if(isFix){
				int[] row = tableFix.getSelectedRows();
				tableFloat.setRowSelectionInterval(row[0], row[row.length-1]);
				
			}else{
				int[] row = tableFloat.getSelectedRows();
				tableFix.setRowSelectionInterval(row[0], row[row.length-1]);
			}
		}
	} 
	
	public void init(){//添加表格数据
		Vector colName = new Vector<String>();
		colName.add("日期");
		
		for(int i = 1;i<21;i++){
			colName.add("商品" + i);
		}
		
		Vector rowName = new Vector();
		
		for(int i = 1;i<=31;i++){
			Vector rowV = new Vector<>();	
			rowV.add("7月" + i + "号");
			for(int goods = 1;goods<=20;goods++){
				rowV.add((int)(Math.random()*1000));
			}
		    rowName.add(rowV);
		}
		
		this.colName = colName;
		this.rowName = rowName;
		
		laySet();
	}
	
	public void laySet(){
		fixModel = new fixTable();
		tableFix = new MTable(fixModel);
		ListSelectionModel fixed = tableFix.getSelectionModel();//注意这里分开的写法 
		fixed.addListSelectionListener(new listSelecteListener(true));
		
		
		floatModel = new floatTable();
		tableFloat = new MTable(floatModel);
		ListSelectionModel floated = tableFloat.getSelectionModel();
		floated.addListSelectionListener(new listSelecteListener(false));
		tableFloat.setSelectionBackground(Color.green);
		//tableFloat.setCellSelectionEnabled(true);
		tableFloat.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		
		JScrollPane js = new JScrollPane();//创建滚动面板
		js.setCorner(JScrollPane.UPPER_LEFT_CORNER, tableFix.getTableHeader());//将固定列头放在滚动面板的左上方
		JViewport viewport = new JViewport();//创建一个视口
		viewport.setView(tableFix);//将固定表格放在视口中
		viewport.setPreferredSize(tableFix.getPreferredSize());//调整适当的大小
		
		js.setRowHeaderView(viewport);//将这个视口放在滚动面板中
		js.setViewportView(tableFloat);//把滚动的对象设置为移动表格
		getContentPane().add(js,BorderLayout.CENTER);
		
		setVisible(true);
		setExtendedState(JFrame.MAXIMIZED_BOTH);//默认最大化
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}

	public static void main(String[] agrs){
		new test();
	}
}



MTable   文件


import java.util.Vector;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;


public class MTable extends JTable {

	public MTable(Vector row, Vector col) {
		// TODO Auto-generated constructor stub
		super(row,col);
	}
	
	public MTable(TableModel fixModel) {
		// TODO Auto-generated constructor stub
		super.setModel(fixModel);
	}

	public TableCellRenderer getDefaultRenderer(Class<?> colClass){
		DefaultTableCellRenderer cr = (DefaultTableCellRenderer) super.getDefaultRenderer(colClass);
		cr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
		return cr;
	}
	
	public boolean isCellEditable(int row,int col){
		return false;
	}
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值