- 浏览: 3122828 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (372)
- diy (4)
- linux (19)
- 杂项 (30)
- Swing (21)
- Java2D (21)
- Java3D (5)
- JavaIO (9)
- Java通讯 (5)
- Java设计模式 (3)
- Java多媒体 (0)
- Java算法 (7)
- Spring&EJB (29)
- Javaoffice (4)
- web前端 (23)
- javascript (1)
- php基础 (1)
- eclipse (3)
- 网站相关 (3)
- Apache (4)
- seo (12)
- db (28)
- server (3)
- api (4)
- 异常 (12)
- 计算机网络词汇表 (3)
- 随想录 (52)
- 收藏 (17)
- 犹太人的智慧 (3)
- 多线程 (1)
- jfreechart (7)
- Test (1)
- SorLib (30)
- ruby on rails (1)
最新评论
-
houyutao:
二三四都是错的空字符串也被匹配,*应该改成+
Java中判断字符串是否为数字的五种方法 -
mingyun:
但是 java.util.ArrayList 实现了 remo ...
java.lang.UnsupportedOperationException 解决方案 -
mingyun:
1.因为 Arrays.asList 返回的是 Arrays内 ...
java.lang.UnsupportedOperationException 解决方案 -
leolu007:
用java8新特性String testStr = " ...
java.lang.UnsupportedOperationException 解决方案 -
zhaohuaxishiwzw:
我之前所在的项目就是日本一家证券公司的项目。完全使用的是j2e ...
抛弃EJB(EJB2.0,EJB3.0,EJB4.0)
关键词:Swing,JTables,Excel,复制,粘贴
当今很多业务应用程序都是使用 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):
示例应用程序
下面是示例应用程序 Frame1.java,它使用 ExcelAdapter 实现 JTable 与 Excel 的兼容。
Excel 的剪贴板格式
Excel 的剪贴板格式非常简单。它采用制表符分隔同一行上的元素,并用换行符分隔行。这样,当您复制一组连续的和/或相邻的单元格时,Excel 只将电子表格数据标记到一个长字符串中,各个单元格值由该字符串内的制表符和换行符分隔。如果所选的单元格不相邻时怎么办?很简单:Excel 不会让您将所选内容复制到剪贴板。这种行为由本文所说明的适配器模仿,如果所选择的单元格不相邻,也不会使您复制数据。在 Excel 中,会弹出一个对话框告诉我们不允许复制;这一行为由适配器再次模仿。
代码简单解释
要使用这一功能,您需要下载 ExcelAdapter.java 文件,对其进行编译,将示例应用程序中的最后一行添加到您代码中的某个位置,以激活 JTable 上的适配器。
在适配器中,复制和粘贴功能的激活按键都经过了注册。其后,无论何时键入激活的按键, actionPerformed 方法就会被调用。如果是复制操作,则所选择的单元格数据都会为 Excel 进行适当的标记,并写入系统剪贴板中。如果是粘贴操作,则将系统剪贴板中的数据转换为字符串形式,并经过分析,根据所选择的单元格植入 JTables 单元格中。
结论
使用用 Java 编写的表格的用户常常希望 Jtables 中的数据与 Excel 中的数据处理方法相似。它并不是编写代码来实现每个 JTable 上的复制-粘贴功能,而是更为简单地编写通用的适配器,只需添加一行代码即可将所需功能添加到每个 Jtable 中。此 Java Tip 中提供的适配器正好做到这一点
当今很多业务应用程序都是使用 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 中提供的适配器正好做到这一点
发表评论
-
Java 字符串与文件的相互转换
2013-02-19 09:54 2844package com.honda.dms.cdhp; ... -
利用Stripes写的一个简单Action
2013-02-19 09:54 1659public class HelloActionBean im ... -
一个完整的Java RMI通讯的例子
2013-02-18 15:16 2214完整的代码,请参考附件。 服务器端: public class ... -
Java使用Selelium的一个例子
2013-02-18 15:11 2564public class TestUserRegister e ... -
Java在字符串中查找需要的字段
2013-02-18 15:06 1995该方法可以将一段字符串中特定的字符取出: 例如:aaaaa[T ... -
Java 定时器 5秒钟后自动退出
2013-02-18 15:02 3727一个简易的Java定时器方法, 5秒钟后退出。 privat ... -
利用Applet请求服务
2013-02-18 14:32 1841public class ConnectionHelper { ... -
一个实用的工具类(不断添加)
2012-07-02 16:37 1345目前有的功能: 1. 将一个文件的所有内容读取的字符串。 2. ... -
Java 将首字母大写变小写
2012-06-28 15:24 15906class Test { public static ... -
Java利用split分割ip
2012-02-24 15:26 3490public void test() { Strin ... -
Java调用sh文件
2012-01-30 13:59 8295其实java调用linux下的sh文件,和调用windows下 ... -
SimpleDateFromat的用法
2011-09-26 17:11 29212008-11-05 15:57Date类内部既不存储年月日也 ... -
将异常(getStackTrace)转化成String
2011-08-01 15:27 16544private static String getStackM ... -
freemaker 遍历list嵌套map
2011-06-15 17:42 7721有这样一个数据结构List<Map<String, ... -
Java保留小数点后几位
2011-06-01 10:26 44871.(double) (Math.round(sd3*1000 ... -
Java Object类中方法理解
2011-03-28 16:08 4608Object类中,共有12个方法,对这些方法的理解程度直接关系 ... -
Java 利用replaceAll 替换中括号
2011-03-03 11:05 22134Java的replaceAll函数默认是不能替换中括号的,例如 ... -
Java 访问(复制,粘贴)剪切板
2011-03-03 10:04 8501以下共有4个函数分别是: 1.从剪切板获得文字。 2.将字符串 ... -
Java 打开文件夹(Windows文件夹)
2011-02-21 12:51 19722利用JavaIO操作文件大家都很熟悉,不过利用Java打开一个 ... -
java 获得网络资源
2011-02-09 11:42 2469java在网络上请求地址,都会用到URL url = new ...
相关推荐
标题中的“实现Swing的JTables和Excel间的复制和粘贴功能”指的是在Java ...以上就是Java Swing中实现JTables与Excel间复制粘贴功能的主要技术和思路,通过这种方式,可以方便地在桌面应用和电子表格软件之间交换数据。
【Swing的JTables与Excel间复制粘贴功能实现】 Swing的JTable组件是Java GUI编程中用于显示和编辑表格数据的重要工具,它在许多业务应用中扮演着电子表格的角色。然而,用户往往需要在JTable和Microsoft Excel之间...
使用这一 Java 技巧中提供的适配器类,只需一行代码即可添加在 JTables 和 Excel 间复制和粘贴信息的功能。请注意,由于未签名的 applet 不能使用系统剪贴板,此功能不适用于这些 Java 程序。 当今很多业务应用...
实现 Swing 的 JTables 和 Excel 间的复制和粘贴功能 实 现JAVA 的 动 态 类 载 入 机 制 使用Java实现数据报通讯过程 使用Java制作多点发送程序 提高Java代码可重用性的三个措施 用 Java 保存位图文件 用JAVA...
本项目涉及的核心是“Swing下滚动条实现仿分页”,这通常是为了在有限的屏幕空间内展示大量数据,提供类似数据库分页的功能,但通过滚动条操作。我们将深入探讨Swing组件JTable、JScrollPane以及如何利用它们来实现...
"features"目录下的文件描述了插件的功能和依赖关系,"plugins"目录则包含插件的实现代码和资源。在安装或更新Eclipse插件时,这两个目录会被修改以添加或更新相应的组件。 总的来说,Eclipse的Swing和SWT插件如...
这里的代码可能包含创建窗口、添加控件、响应用户事件、实现复杂的布局设计,甚至涉及Swing的高级特性,如JTables、JTrees以及模型-视图-控制器(MVC)架构的应用。 在"有用的Java代码"这个文件名中,我们可以期待...
7. **Swing增强(JTables, JTrees, JLists)**: Swing提供了一些高级组件,如JTable用于显示和编辑表格数据,JTree用于展示树状结构,JList用于列出可选择的项。这些组件常用于数据展示和导航。 8. **国际化...
XPTable 是一个流行的老牌Java Swing组件库,主要用于在Java应用程序中创建功能丰富的表格控件。这个库使得开发者能够轻松地在用户界面中添加类似电子表格的功能,包括数据排序、过滤、编辑等。XPTable这个名字暗示...
JFreeChart 可以很好地与 JavaFX、Swing 等图形库集成,同时也可配合 JTables 和 JTrees 使用,实现数据可视化。在企业级应用中,它经常与 JDBC、Hibernate 等数据库访问技术结合,展示数据库查询结果。 **总结** ...
使用JTables和JLists实时从数据库中获取数据。 以原始格式(在本例中为PDF格式)获取存储在数据库中的文件。 在excel中创建的电子表格将导入MySql本地服务器,并在应用程序的JTable中获取。 使用GUI组件的集成...
接下来,"JTABLES.H"、"JTYPES.H"和"JGLOBALS.H"是头文件,它们可能包含了JPEG解码过程中所需的常量、数据类型定义和全局变量声明。"JTABLES.H"可能包含了JPEG的标准量化表和Huffman表定义,这些都是JPEG编码的关键...
这款工具特别适用于那些需要频繁使用诸如JTables、JMenus、JTrees、状态栏以及选项卡式窗格等组件的项目。通过jXyner,开发者可以直观地设计和布局这些组件,从而提升开发效率和代码质量。 **GUI组件设计**: 在...
提供了许多有用的 Java 内容:CSV 文件处理、线程交互、新的 Swing 数据模型,例如用于 JTables 中的地图列表、JTable 单元格大小调整类和用于网络应用程序的完整强大的客户端-服务器框架。
我正在创建简单的Inventory java应用程序,因此该如何显示java中MySQL表中的客户完成订单和付款。 我想在Java Jtables中显示客户分类帐。 我无法显示所需的表,因为它仅显示在一行中。 但是我想要的数据在...