package xuzhenzhen.wordprocess.view;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.KeyStroke;
import javax.swing.table.DefaultTableModel;
public class MyScrollPanel extends JScrollPane implements
ActionListener{
private static final long serialVersionUID =
-7362210430620040615L;
private DefaultTableModel model;
private JTable table;
private Clipboard clip;
public MyScrollPanel(){
clip=Toolkit.getDefaultToolkit().getSystemClipboard();
}
public void
setTable(ArrayList
list){
model=new
DefaultTableModel(list.toArray(), 50);
table=new JTable(model);
table.setPreferredScrollableViewportSize(new
Dimension(800, 640));
table.getTableHeader().setReorderingAllowed(false);
initKey();
setViewportView(table);
}
public JTable getTable(){
return table;
}
public void initKey(){
KeyStroke
copy=KeyStroke.getKeyStroke(KeyEvent.VK_C,
KeyEvent.CTRL_MASK,false);
KeyStroke
paste=KeyStroke.getKeyStroke(KeyEvent.VK_V,
KeyEvent.CTRL_MASK,false);
table.registerKeyboardAction(this,
"copy", copy,JComponent.WHEN_FOCUSED);
table.registerKeyboardAction(this,
"paste", paste,JComponent.WHEN_FOCUSED);
}
@Override
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method
stub
if(e.getActionCommand().equals("copy")){
dealCopy();return;
}
if(e.getActionCommand().equals("paste")){
dealPaste();return;
}
}
public void dealCopy(){
StringBuffer buffer=new
StringBuffer();
int
numCols=table.getSelectedColumnCount();
int
numRows=table.getSelectedRowCount();
int[]
rows=table.getSelectedRows();
int[]
cols=table.getSelectedColumns();
for(int
i=0;i
for(int
j=0;j
buffer.append(table.getValueAt(rows[i],
cols[j]));
if(j!=numCols-1)buffer.append("
");
}
buffer.append("\n");
}
StringSelection strSel=new
StringSelection(buffer.toString());
clip.setContents(strSel,
strSel);
}
public void dealPaste(){
try {
int
rowStart=table.getSelectedRow();
int
colStart=table.getSelectedColumn();
int
colNum=table.getColumnCount();
String
clipStr=(String)clip.getContents(table).getTransferData(DataFlavor.stringFlavor);
String[]
str1=clipStr.split("\n");
model.setNumRows(str1.length+rowStart);
for(int
i=0;i
String[]
str2=str1[i].split(" ");
for(int
j=0;j
if(colStart+j
table.setValueAt(str2[j],
rowStart+i, colStart+j);
}
}
}
} catch (Exception e) {
// TODO
Auto-generated catch block
e.printStackTrace();
}
}
}