📄 copypasteadapter.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 + -