亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 實現swing的jtables和excel間的復制和粘貼功能.txt

?? 含有許多JAVA的技巧!
?? TXT
字號:
實現Swing的JTables和Excel間的復制和粘貼功能 
(加入日期:2001-5-6 點擊數:846)
【對此文發表評論】 【編程愛好者論壇】 【保存文章至硬盤】 【打印文章】 
 
當今很多業務應用程序都是使用 Java 開發的,并且以后這種用 Java 開發的應用會更多。而在許多應用程序都使用了 Swing 的 JTable 組件,以類似電子表格的格式顯示數據。如果業務應用程序可以將數據導入 Microsoft Excel 和從 Microsoft Excel 中導出數據,則會為用戶帶來方便,使用戶可以使用無處不在的該電子表格程序的強大功能。此 Java 技巧將幫助您理解系統剪貼板,并使您的 JTable 能夠與 Excel 交互和互操作。您將看到,通過在當前應用程序中僅僅添加另外的一行代碼即可實現這一有用功能的添加。

要實現這一目標,需要做的只是復制這里給出的文件 ExcelAdapter.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<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+"at
row="+startRow+i+"column="+startCol+j);
               }
            }
         }
         catch(Exception ex){ex.printStackTrace();}

      }
   }
}

示例應用程序 
下面是示例應用程序 Frame1.java,它使用 ExcelAdapter 實現 JTable 與 Excel 的兼容。

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);

   // 這就是添加復制和粘貼功能的那一行!
   ExcelAdapter myAd = new ExcelAdapter(jTable1);
   }
}

Excel 的剪貼板格式 
Excel 的剪貼板格式非常簡單。它采用制表符分隔同一行上的元素,并用換行符分隔行。這樣,當您復制一組連續的和/或相鄰的單元格時,Excel 只將電子表格數據標記到一個長字符串中,各個單元格值由該字符串內的制表符和換行符分隔。如果所選的單元格不相鄰時怎么辦?很簡單:Excel 不會讓您將所選內容復制到剪貼板。這種行為由本文所說明的適配器模仿,如果所選擇的單元格不相鄰,也不會使您復制數據。在 Excel 中,會彈出一個對話框告訴我們不允許復制;這一行為由適配器再次模仿。

代碼簡單解釋 
要使用這一功能,您需要下載 ExcelAdapter.java 文件,對其進行編譯,將示例應用程序中的最后一行添加到您代碼中的某個位置,以激活 JTable 上的適配器。

在適配器中,復制和粘貼功能的激活按鍵都經過了注冊。其后,無論何時鍵入激活的按鍵, actionPerformed 方法就會被調用。如果是復制操作,則所選擇的單元格數據都會為 Excel 進行適當的標記,并寫入系統剪貼板中。如果是粘貼操作,則將系統剪貼板中的數據轉換為字符串形式,并經過分析,根據所選擇的單元格植入 JTables 單元格中。

結論 
使用用 Java 編寫的表格的用戶常常希望 Jtables 中的數據與 Excel 中的數據處理方法相似。它并不是編寫代碼來實現每個 JTable 上的復制-粘貼功能,而是更為簡單地編寫通用的適配器,只需添加一行代碼即可將所需功能添加到每個 Jtable 中。此 Java Tip 中提供的適配器正好做到這一點。

本欄文章均來自于互聯網,版權歸原作者和各發布網站所有,本站收集這些文章僅供學習參考之用。任何人都不能將這些文章用于商業或者其他目的。( ProgramFan.Com ) 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲品质自拍视频| 亚洲一区二区在线免费看| 欧美日韩视频在线观看一区二区三区| 一本色道久久综合亚洲精品按摩| 久久综合久久综合亚洲| 欧美一二三区精品| 欧美一区二区播放| 精品久久久久久最新网址| 久久看人人爽人人| 中文字幕一区av| 亚洲欧美日韩在线播放| 亚洲mv在线观看| 免费日本视频一区| 国产一区福利在线| 99视频在线精品| 日本福利一区二区| 欧美高清视频在线高清观看mv色露露十八| 久草在线在线精品观看| 日韩不卡手机在线v区| 激情综合色综合久久综合| 国产乱一区二区| 99精品热视频| 91精品欧美久久久久久动漫| 欧美va在线播放| 国产精品麻豆久久久| 一区二区三区高清| 久久99精品网久久| 99久久精品情趣| 欧美一级欧美一级在线播放| 久久一留热品黄| 亚洲电影第三页| 国产精品一区二区久久不卡 | 色综合天天性综合| 欧美日韩在线三级| 欧美高清在线一区二区| 亚洲综合区在线| 国产成人午夜电影网| 欧美无砖专区一中文字| 久久久久久久久久久久久夜| 亚洲精品视频在线看| 美女视频免费一区| 在线观看免费一区| 国产亚洲精品7777| 日韩电影网1区2区| 91福利精品视频| 欧美国产精品久久| 麻豆久久久久久| 欧美乱妇15p| 中文字幕在线一区免费| 另类成人小视频在线| 在线观看成人小视频| 国产精品欧美一区喷水| 美女视频一区二区三区| 欧美图区在线视频| 日韩美女视频一区| 国产精品一区二区果冻传媒| 91精品国产综合久久久蜜臀粉嫩 | 51午夜精品国产| 日韩美女视频19| 国产成人午夜精品影院观看视频 | 在线播放欧美女士性生活| 亚洲视频一区二区免费在线观看| 久久亚洲影视婷婷| 天堂久久一区二区三区| 99精品一区二区三区| 国产精品麻豆久久久| 国产白丝网站精品污在线入口| 国产成a人亚洲| 91精品国产一区二区三区蜜臀| 欧美大片顶级少妇| 男男成人高潮片免费网站| 欧美猛男男办公室激情| 一区二区三区四区视频精品免费 | 国产精品激情偷乱一区二区∴| 中文字幕欧美激情| 国产麻豆精品久久一二三| 777a∨成人精品桃花网| 午夜视频在线观看一区| 欧美日韩高清在线播放| 奇米亚洲午夜久久精品| 欧美片在线播放| 日日欢夜夜爽一区| 日韩欧美亚洲另类制服综合在线| 国产亚洲精品aa| eeuss国产一区二区三区| 中文字幕一区免费在线观看| 色综合天天视频在线观看| 亚洲精品videosex极品| 欧美精三区欧美精三区| 亚欧色一区w666天堂| 欧美成人激情免费网| 国产91丝袜在线18| 亚洲精品中文在线| 91麻豆精品国产无毒不卡在线观看 | 国产剧情一区在线| 国产欧美va欧美不卡在线| 99精品视频免费在线观看| 亚洲午夜视频在线| 欧美xxx久久| 不卡的av电影在线观看| 亚洲成年人影院| 精品电影一区二区| 91在线看国产| 一区二区三区蜜桃| 亚洲精品一区二区三区蜜桃下载 | 国产成人自拍高清视频在线免费播放| 99精品1区2区| 日韩高清一区在线| 国产欧美一区视频| 欧美日韩国产综合视频在线观看| 国产精品三级视频| 精品婷婷伊人一区三区三| 久久国产麻豆精品| 亚洲精品免费视频| 久久婷婷国产综合精品青草| 91国产福利在线| 国产乱子伦视频一区二区三区 | 日韩欧美国产电影| aaa欧美色吧激情视频| 午夜久久久久久| 国产精品久久久久久久久晋中| 国产一区二区三区av电影| 亚洲一区二区美女| 亚洲欧洲无码一区二区三区| 欧美一区二区成人| 欧美吻胸吃奶大尺度电影| 国产精品白丝jk白祙喷水网站 | 中文字幕乱码久久午夜不卡 | 欧美高清激情brazzers| 国产老女人精品毛片久久| 午夜视频在线观看一区二区| 国产精品久久久一本精品| 精品日韩一区二区三区免费视频| 日韩不卡手机在线v区| 一区二区三区资源| 国产精品私人自拍| 欧美激情综合网| 久久久影视传媒| 精品日韩在线一区| 日韩视频一区二区在线观看| 欧美日本精品一区二区三区| 成人在线视频一区| 国产成人综合视频| 国产精品亚洲专一区二区三区| 中文字幕制服丝袜一区二区三区| 99re这里都是精品| 99热99精品| jlzzjlzz欧美大全| 国产高清精品在线| 成人黄色国产精品网站大全在线免费观看| 国产清纯在线一区二区www| 26uuu欧美| 精品久久五月天| 久久久久国产精品麻豆ai换脸 | 一区二区三区四区在线| 亚洲免费观看视频| 亚洲欧美二区三区| 亚洲午夜三级在线| 亚洲123区在线观看| 亚洲福利视频一区二区| 婷婷成人激情在线网| 亚洲mv在线观看| 裸体健美xxxx欧美裸体表演| 美脚の诱脚舐め脚责91| 国产精品一区二区免费不卡| 丁香激情综合五月| 一本一道久久a久久精品综合蜜臀| 日韩av高清在线观看| 美女网站一区二区| 成人免费黄色大片| 91福利区一区二区三区| 在线成人高清不卡| 2024国产精品视频| 亚洲丝袜另类动漫二区| 亚洲精品亚洲人成人网| 丝袜美腿高跟呻吟高潮一区| 国内精品国产三级国产a久久| 亚洲一本大道在线| 美国十次了思思久久精品导航| 中文字幕在线观看一区二区| 一片黄亚洲嫩模| 久久精品国产在热久久| 国产91丝袜在线播放0| 欧美伊人久久大香线蕉综合69| 国产精品羞羞答答xxdd| 日本韩国欧美一区二区三区| 51精品久久久久久久蜜臀| 欧美国产精品一区二区三区| 亚洲一区二区三区四区在线观看 | 蜜臀av性久久久久av蜜臀妖精| 国产精品白丝在线| 日本欧美加勒比视频| 国产精品亚洲第一| 欧美性猛交一区二区三区精品| 成人性视频免费网站| 欧美日韩精品福利| 综合色中文字幕| 免费观看在线色综合| 91蜜桃传媒精品久久久一区二区 | 亚洲日本在线a|