JAVA之表格

来源:互联网 发布:海贼无双3数据地址 编辑:程序博客网 时间:2024/06/01 21:31

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





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{//创建左边的固定表格模型@Overridepublic int getColumnCount() {// TODO Auto-generated method stubreturn fixColNum;}@Overridepublic int getRowCount() {// TODO Auto-generated method stubreturn rowName.size();}@Overridepublic Object getValueAt(int arg0, int arg1) {// TODO Auto-generated method stubreturn rowName.get(arg0).get(arg1);}@Overridepublic String getColumnName(int col){//没有这个,初始化列名也无法显示,默认为A。B。。。的大写字母return (String) colName.get(col);}}public class floatTable extends AbstractTableModel{//创建右边的移动表格模型private TreeSet<Object> model = new TreeSet<Object>();@Overridepublic int getColumnCount() {// TODO Auto-generated method stubreturn colName.size() - fixColNum;}@Overridepublic int getRowCount() {// TODO Auto-generated method stubreturn rowName.size();}@Overridepublic Object getValueAt(int rowIndex, int columnIndex) {// TODO Auto-generated method stubreturn rowName.get(rowIndex).get(columnIndex + fixColNum);}@Overridepublic 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;}@Overridepublic void valueChanged(ListSelectionEvent e) {// TODO Auto-generated method stubif(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 stubsuper(row,col);}public MTable(TableModel fixModel) {// TODO Auto-generated constructor stubsuper.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;}}


0 0
原创粉丝点击