有没有人可以帮帮小弟呀?郁闷ing...

解决方案 »

  1.   

    why delete?
    excelFile.delete();
      

  2.   

    如何将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();}
    }
    }
    }