SwingのJTablesとExcel間のコピーと貼り付け機能を実現

5587 ワード

現在、多くのビジネスアプリケーションはJavaを使用して開発されており、今後、Javaを使用して開発されるアプリケーションが増えます.多くのアプリケーションでは、SwingのJTableコンポーネントを使用して、スプレッドシートのような形式でデータを表示しています.ビジネスアプリケーションがMicrosoft Excelにデータをインポートしたり、Microsoft Excelからデータをエクスポートしたりすることができる場合、ユーザーはどこにでもあるスプレッドシートプログラムの強力な機能を使用することができます.このJavaテクニックは、システムクリップボードを理解し、JTableがExcelとインタラクティブで相互運用できるようにします.この有用な機能の追加は、現在のアプリケーションに別のコードを追加するだけで実現できます.
この目的を達成するには、ここに示すファイルをコピーするだけです.JAvaは、それをコンパイルし、アプリケーションがExcelAdapterを見つけることができることを確認します.classファイル;終わったら、JTableでExcelと通話できます!この行のコードのみで、Excelへのコピー(Ctrl+C)と貼り付け(Ctrl+V)、およびExcelからのコピーと貼り付けを実現する方法を示します.ExcelAdapterを使用するアプリケーションの例も提供されています.
コードの下には、このタスクを実際に完了したアダプタコード(ExcelAdapter.javaと呼ばれます):
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.datatransfer.*;
import java.util.*;

/** 
	* ExcelAdapter    JTables       
	*      。               
	*   Excel           。     
	*     JTables   Excel      。 
	*/
public class ExcelAdapter implements ActionListener
   {
   private String rowstring,value;
   private Clipboard system;
   private StringSelection stsel;
   private JTable jTable1 ;


   /**    
	* Excel      JTable   ,
	*      JTable        
	*   ,          。
    */


public ExcelAdapter(JTable myJTable)
   {
      jTable1 = myJTable;
      KeyStroke copy = KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK,false);

      //                 
      //               。
      KeyStroke paste = KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK,false);

      //                 
      //               。

jTable1.registerKeyboardAction(this,"Copy",copy,JComponent.WHEN_FOCUSED);


jTable1.registerKeyboardAction(this,"Paste",paste,JComponent.WHEN_FOCUSED);

      system = Toolkit.getDefaultToolkit().getSystemClipboard();
   }

   /**
    *               。
    */
public JTable getJTable() {return jTable1;}

public void setJTable(JTable jTable1) {this.jTable1=jTable1;}

   /**
	*                   。
	*   ,         ActionCommands。
	*                  ,
	*             。
	*                 
        * JTable                。
    */
public void actionPerformed(ActionEvent e)
   {
      if (e.getActionCommand().compareTo("Copy")==0)
      {
         StringBuffer sbf=new StringBuffer();

         //                
         //    
         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 
  

Excel
Excel 。 , 。 , / ,Excel , 。 ? :Excel 。 , , 。 Excel , ; 。


, ExcelAdapter.java , , , JTable 。

, 。 , , actionPerformed 。 , Excel , 。 , , , JTables 。


Java Jtables Excel 。 JTable - , , Jtable 。 Java Tip 。