⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 copypasteadapter.java

📁 实现JTable与Excel之间的数据交换
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.datatransfer.*;
import java.util.*;
import java.text.DateFormat;

public class CopyPasteAdapter extends MouseAdapter {
    protected JPopupMenu popupMenu;
    protected AbstractAction copyAction;
    protected AbstractAction pasteAction;
    protected JTable mt;
    protected Clipboard system;
    protected StringSelection stsel;

    public CopyPasteAdapter(JTable tv) {
        mt=tv;
        popupMenu =new JPopupMenu();
        copyAction =new AbstractAction("Copy") {
            public void actionPerformed(ActionEvent event){
                //此处是复制调用
                System.out.println("Try to Copy......");
                OnCopy();
            }
        };
        popupMenu.add(copyAction);
        system=Toolkit.getDefaultToolkit().getSystemClipboard();
        pasteAction =new AbstractAction("Paste") {
            public void actionPerformed(ActionEvent event){
                //此处是粘贴调用
                System.out.println("Try to Paste......");
                OnPaste();
            }
        };
        popupMenu.add(pasteAction);
    }
    public void mousePressed(MouseEvent event) {
        int rown,coln;
        // 鼠标坐标
        Point point=new Point();
        if ((event.getModifiers()&InputEvent.BUTTON3_MASK) !=0){
            //鼠标坐标转换成表中单元格行列号
            point.x=event.getX();
            point.y=event.getY();
            rown=mt.rowAtPoint(point);
            coln=mt.columnAtPoint(point);
            //显示下拉菜单,在被选择的区域中按鼠标右键Copy功能才能使用
            boolean cancopy=mt.isCellSelected(rown,coln)?true:false;
            copyAction.setEnabled(cancopy);
            popupMenu.show(event.getComponent(),point.x,point.y);
        }
    }
    // OnCopy()方法完成从JTable到Excel的数据传送
    public void OnCopy() {
            StringBuffer sbf =new StringBuffer();
            int numcols=mt.getSelectedColumnCount();
            int numrows=mt.getSelectedRowCount();
            int[] rowsselected=mt.getSelectedRows();
            int[] colsselected=mt.getSelectedColumns();
            Date date=new Date();
            //此循环将JTable单元格中数据按顺序取出并加分隔符
            for(int i=0;i<numrows;i++) {
                for (int j=0;j<numcols;j++){
                    //将日期数据复制到字符串中
                    if(colsselected[j]==2){
                    date=(Date)mt.getValueAt(rowsselected[i],colsselected[j]);
                    sbf.append(DateFormat.getDateInstance().format(date));
                    }
                    else
                    //将字符数据复制到字符串中
                    sbf.append(mt.getValueAt(rowsselected[i],colsselected[j]));
                    if (j<numcols-1) sbf.append("\t");
                }
                sbf.append("\n");
        }
        //将数据写入到剪贴板中
        stsel=new StringSelection(sbf.toString());
        system=Toolkit.getDefaultToolkit().getSystemClipboard();
        system.setContents(stsel,stsel);
    }
    // OnPaste()方法完成Excel的数据传送到JTable中
    public void OnPaste(){
        //取得JTable中被选择区域的起始行、列号
        int startRow=(mt.getSelectedRows())[0];
        int startCol=(mt.getSelectedColumns())[0];
        String rowstring,value;
        Date mydate=new Date();
        try {//从剪贴板中读取数据
            String trstring=(String)
            (system.getContents(this).getTransferData(DataFlavor.stringFlavor));
            //设置字符串中的分隔符
            StringTokenizer st1=new StringTokenizer(trstring,"\n");

            for(int i=0;st1.hasMoreTokens();i++){
                rowstring=st1.nextToken();
                StringTokenizer st2=new StringTokenizer(rowstring,"\t");
                for(int j=0;st2.hasMoreTokens();j++){
                    value=st2.nextToken();
                    if(startRow+i<mt.getRowCount()&&startCol+j<mt.getColumnCount()){
                       //粘贴到JTable中日期数据
                       if((startCol+j)==2){
                         try{
                           mydate=DateFormat.getDateInstance().parse(value);
                           mt.setValueAt(mydate,startRow+i,startCol+j);
                         }catch(Exception e){
                             System.out.println("粘贴数据格式不正确!");
                         }
                       }
                       else
                       //粘贴到JTable中字符数据
                       mt.setValueAt(value,startRow+i,startCol+j);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        mt.updateUI();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -