如何将JTable中的数据Copy到其他文件类型中(包括:Word,Excel等) xuwanhong 原创 (参与分:27567,专家分:800) 发表:2002-9-3 上午8:50 版本:1.0 阅读:1211次 如何将JTable中的数据Copy到其他文件上首先要明确的,其他文件不一定是Java的文件,甚至与Java一点也没有关系,比如操作系统的记事本,微软的办公软件等等。 实现的方法可以将JTable中的数据copy到系统的粘贴版上,然后通过粘贴板在Copy到其他部分去。 以下是具体实现的代码://:Frame1.java import java.awt.*; import javax.swing.*;public class Frame1 extends Frame{BorderLayout borderLayout1 = new BorderLayout();JTable jTable1 ;Object[][] data=new Object[4][4];Object header[]= {"Jan","Feb","Mar","Apr"};public static void main(String args[]){Frame1 myframe=new Frame1();myframe.setSize(new Dimension(250,250));myframe.setVisible(true);} public Frame1(){super();try{jbInit();}catch (Exception e){e.printStackTrace();}}private void jbInit() throws Exception{for (int i=0;i<4;i++)for (int j=0;j<4;j++)data[i][j]=new Integer(i*10+j); System.out.println("Header length="+header[1]);jTable1=new JTable(data,header);jTable1.setCellSelectionEnabled(true);this.setTitle("Excel Lent JTABLE");jTable1.setBackground(Color.pink);this.setLayout(borderLayout1);this.setSize(new Dimension(400, 300)); this.setBackground(Color.white);this.add(jTable1, BorderLayout.CENTER); // This is the line that does all the magic!ExcelAdapter myAd = new ExcelAdapter(jTable1);} }//:ExcelAdapter.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.datatransfer.*; import java.util.*; /** * ExcelAdapter enables Copy-Paste Clipboard functionality on JTables. * The clipboard data format used by the adapter is compatible with * the clipboard format used by Excel. This provides for clipboard * interoperability between enabled JTables and Excel. */ public class ExcelAdapter implements ActionListener { private String rowstring,value; private Clipboard system; private StringSelection stsel; private JTable jTable1 ; /** * The Excel Adapter is constructed with a * JTable on which it enables Copy-Paste and acts * as a Clipboard listener. */public ExcelAdapter(JTable myJTable) { jTable1 = myJTable; KeyStroke copy = KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK,false); // Identifying the copy KeyStroke user can modify this // to copy on some other Key combination. KeyStroke paste = KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK,false); // Identifying the Paste KeyStroke user can modify this //to copy on some other Key combination. jTable1.registerKeyboardAction(this,"Copy",copy,JComponent.WHEN_FOCUSED);jTable1.registerKeyboardAction(this,"Paste",paste,JComponent.WHEN_FOCUSED); system = Toolkit.getDefaultToolkit().getSystemClipboard(); } /** * Public Accessor methods for the Table on which this adapter acts. */ public JTable getJTable() {return jTable1;} public void setJTable(JTable jTable1) {this.jTable1=jTable1;} /** * This method is activated on the Keystrokes we are listening to * in this implementation. Here it listens for Copy and Paste ActionCommands. * Selections comprising non-adjacent cells result in invalid selection and * then copy action cannot be performed. * Paste is done by aligning the upper left corner of the selection with the * 1st element in the current selection of the JTable. */ public void actionPerformed(ActionEvent e) { if (e.getActionCommand().compareTo("Copy")==0) { StringBuffer sbf=new StringBuffer(); // Check to ensure we have selected only a contiguous block of // cells int numcols=jTable1.getSelectedColumnCount(); int numrows=jTable1.getSelectedRowCount(); int[] rowsselected=jTable1.getSelectedRows(); int[] colsselected=jTable1.getSelectedColumns(); if (!((numrows-1==rowsselected[rowsselected.length-1]-rowsselected[0] && numrows==rowsselected.length) && (numcols-1==colsselected[colsselected.length-1]-colsselected[0] && numcols==colsselected.length))) { JOptionPane.showMessageDialog(null, "Invalid Copy Selection", "Invalid Copy Selection", JOptionPane.ERROR_MESSAGE); return; } for (int i=0;i<numrows;i++) { for (int j=0;j<numcols;j++) { sbf.append(jTable1.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); } if (e.getActionCommand().compareTo("Paste")==0) { System.out.println("Trying to Paste"); int startRow=(jTable1.getSelectedRows())[0]; int startCol=(jTable1.getSelectedColumns())[0]; try { String trstring= (String)(system.getContents(this).getTransferData(DataFlavor.stringFlavor)); System.out.println("String is:"+trstring); 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=(String)st2.nextToken(); if (startRow+i< jTable1.getRowCount() && startCol+j< jTable1.getColumnCount()) jTable1.setValueAt(value,startRow+i,startCol+j); System.out.println("Putting "+ value+"atrow="+startRow+i+"column="+startCol+j); } } } catch(Exception ex){ex.printStackTrace();} } } }
excelFile.delete();
xuwanhong 原创 (参与分:27567,专家分:800) 发表:2002-9-3 上午8:50 版本:1.0 阅读:1211次
如何将JTable中的数据Copy到其他文件上首先要明确的,其他文件不一定是Java的文件,甚至与Java一点也没有关系,比如操作系统的记事本,微软的办公软件等等。
实现的方法可以将JTable中的数据copy到系统的粘贴版上,然后通过粘贴板在Copy到其他部分去。
以下是具体实现的代码://:Frame1.java
import java.awt.*;
import javax.swing.*;public class Frame1 extends Frame{BorderLayout borderLayout1 = new BorderLayout();JTable jTable1 ;Object[][] data=new Object[4][4];Object header[]= {"Jan","Feb","Mar","Apr"};public static void main(String args[]){Frame1 myframe=new Frame1();myframe.setSize(new Dimension(250,250));myframe.setVisible(true);}
public Frame1(){super();try{jbInit();}catch (Exception e){e.printStackTrace();}}private void jbInit() throws Exception{for (int i=0;i<4;i++)for (int j=0;j<4;j++)data[i][j]=new Integer(i*10+j);
System.out.println("Header length="+header[1]);jTable1=new JTable(data,header);jTable1.setCellSelectionEnabled(true);this.setTitle("Excel Lent JTABLE");jTable1.setBackground(Color.pink);this.setLayout(borderLayout1);this.setSize(new Dimension(400, 300));
this.setBackground(Color.white);this.add(jTable1, BorderLayout.CENTER);
// This is the line that does all the magic!ExcelAdapter myAd = new ExcelAdapter(jTable1);}
}//:ExcelAdapter.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.datatransfer.*;
import java.util.*;
/**
* ExcelAdapter enables Copy-Paste Clipboard functionality on JTables.
* The clipboard data format used by the adapter is compatible with
* the clipboard format used by Excel. This provides for clipboard
* interoperability between enabled JTables and Excel.
*/
public class ExcelAdapter implements ActionListener
{
private String rowstring,value;
private Clipboard system;
private StringSelection stsel;
private JTable jTable1 ;
/**
* The Excel Adapter is constructed with a
* JTable on which it enables Copy-Paste and acts
* as a Clipboard listener.
*/public ExcelAdapter(JTable myJTable)
{
jTable1 = myJTable;
KeyStroke copy = KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK,false);
// Identifying the copy KeyStroke user can modify this
// to copy on some other Key combination.
KeyStroke paste = KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK,false);
// Identifying the Paste KeyStroke user can modify this
//to copy on some other Key combination.
jTable1.registerKeyboardAction(this,"Copy",copy,JComponent.WHEN_FOCUSED);jTable1.registerKeyboardAction(this,"Paste",paste,JComponent.WHEN_FOCUSED);
system = Toolkit.getDefaultToolkit().getSystemClipboard();
}
/**
* Public Accessor methods for the Table on which this adapter acts.
*/
public JTable getJTable() {return jTable1;}
public void setJTable(JTable jTable1) {this.jTable1=jTable1;}
/**
* This method is activated on the Keystrokes we are listening to
* in this implementation. Here it listens for Copy and Paste ActionCommands.
* Selections comprising non-adjacent cells result in invalid selection and
* then copy action cannot be performed.
* Paste is done by aligning the upper left corner of the selection with the
* 1st element in the current selection of the JTable.
*/
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().compareTo("Copy")==0)
{
StringBuffer sbf=new StringBuffer();
// Check to ensure we have selected only a contiguous block of
// cells
int numcols=jTable1.getSelectedColumnCount();
int numrows=jTable1.getSelectedRowCount();
int[] rowsselected=jTable1.getSelectedRows();
int[] colsselected=jTable1.getSelectedColumns();
if (!((numrows-1==rowsselected[rowsselected.length-1]-rowsselected[0] &&
numrows==rowsselected.length) &&
(numcols-1==colsselected[colsselected.length-1]-colsselected[0] &&
numcols==colsselected.length)))
{
JOptionPane.showMessageDialog(null, "Invalid Copy Selection",
"Invalid Copy Selection",
JOptionPane.ERROR_MESSAGE);
return;
}
for (int i=0;i<numrows;i++)
{
for (int j=0;j<numcols;j++)
{
sbf.append(jTable1.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);
}
if (e.getActionCommand().compareTo("Paste")==0)
{
System.out.println("Trying to Paste");
int startRow=(jTable1.getSelectedRows())[0];
int startCol=(jTable1.getSelectedColumns())[0];
try
{
String trstring= (String)(system.getContents(this).getTransferData(DataFlavor.stringFlavor));
System.out.println("String is:"+trstring);
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=(String)st2.nextToken();
if (startRow+i< jTable1.getRowCount() &&
startCol+j< jTable1.getColumnCount())
jTable1.setValueAt(value,startRow+i,startCol+j);
System.out.println("Putting "+ value+"atrow="+startRow+i+"column="+startCol+j);
}
}
}
catch(Exception ex){ex.printStackTrace();}
}
}
}