DOC

3374.docjava

By Erica Henry,2014-10-16 21:20
7 views 0
3374.docjava

    由于程序的原因~本文件未被完整保存。

    首页 ? 研究文集 ? Java GUI

    如何将JTable中的数据Copy到其他文件类型中:包括?Word,Excel等;

    xuwanhong 原创 (参与分?119350~专家分?1900) 发表?2002-09-03 08:50 版本?1.0 阅读?4554

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

     }

     }

    }

版权声明 给作者写信 本篇文章对您是否有帮助? 投票? 投票结果?

    作者其它文章?

    ; JProfiler跟踪和检查系统性能的好工具

    ; Applet与我的恶梦

    ; 关于MapList的性能测试报告

    ; keytool - 密钥和证书管理工具

    ; 深入理解Collections API

    作者全部文章 上一篇文章 下一篇文章 返回〔Java GUI

Report this document

For any questions or suggestions please email
cust-service@docsford.com