實現 Swing 的 JTables 和 Excel 間的複製和貼上功能 (轉)

worldblog發表於2007-12-29
實現 Swing 的 JTables 和 Excel 間的複製和貼上功能 (轉)[@more@]

JTable 和 圖表是常被用在網格或表格中顯示資料。通常,希望輸入到 JTable 的資料已經存在於 Excel 電子表格中。Excel 格式使用在非 Excel 中來實現匯入-匯出功能。因為如此, 軟體也應該提供通用的剪貼簿功能,例如在 JTable 和 Excel 間複製和貼上。本文展示瞭如何使用貼上板在 Java 和 Excel 間複製資料。使用這一 Java 技巧中提供的介面卡類,只需一行程式碼即可新增在 JTables 和 Excel 間複製和貼上資訊的功能。請注意,由於未簽名的 applet 不能使用系統剪貼簿,此功能不適用於這些 Java 程式。

當今很多業務應用程式都是使用 Java 開發的,並且以後這種用 Java 開發的應用會更多。而在許多應用程式都使用了 的 JTable ,以類似電子表格的格式顯示資料。如果業務應用程式可以將資料匯入 Excel 和從 Microsoft Excel 中匯出資料,則會為使用者帶來方便,使使用者可以使用無處不在的該電子表格程式的強大功能。此 Java 技巧將幫助您理解系統剪貼簿,並使您的 JTable 能夠與 Excel 互動和互操作。您將看到,透過在當前應用程式中僅僅新增另外的一行程式碼即可實現這一有用功能的新增。

要實現這一目標,需要做的只是複製這裡給出的 ExcelAdapter.java,對其進行編譯,並確保您的應用程式可以找到 ExcelAdapter.class 檔案;做完後,JTable 就可以與 Excel 進行通話了!我們將向您展示僅透過這一行程式碼,如何實現到 Excel 的複製 (Ctrl+C) 和貼上 (Ctrl+V) 以及從 Excel 進行的複製和貼上。另外還提供了一個使用 ExcelAdapter 的示例應用程式。

er.*; import java.util.*; /** * ExcelAdapter 實現 JTables 中的複製貼上 * 剪貼簿功能。 介面卡所用的剪貼簿資料格式 * 與 Excel 所用的剪貼簿格式相容。這提供了 * 支援的 JTables 和 Excel 間的互操作。 */ public class ExcelAdapter implements ActionListener { private String rowstring,value; private Clipboard system; private Stringion 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 ExcelAdapter.java 檔案,對其進行編譯,將示例應用程式中的最後一行新增到您程式碼中的某個位置,以啟用 JTable 上的介面卡。

在介面卡中,複製和貼上功能的啟用按鍵都經過了註冊。其後,無論何時鍵入啟用的按鍵, actionPerformed 方法就會被。如果是複製操作,則所選擇的單元格資料都會為 Excel 進行適當的標記,並寫入系統剪貼簿中。如果是貼上操作,則將系統剪貼簿中的資料轉換為字串形式,並經過分析,根據所選擇的單元格植入 JTables 單元格中。

結論
使用用 Java 編寫的表格的使用者常常希望 Jtables 中的資料與 Excel 中的資料處理方法相似。它並不是編寫程式碼來實現每個 JTable 上的複製-貼上功能,而是更為簡單地編寫通用的介面卡,只需新增一行程式碼即可將所需功能新增到每個 Jtable 中。此 Java T
ip 中提供的介面卡正好做到這一點。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-996114/,如需轉載,請註明出處,否則將追究法律責任。

相關文章