- 浏览: 3134882 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (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 2885package com.honda.dms.cdhp; ... -
利用Stripes写的一个简单Action
2013-02-19 09:54 1718public class HelloActionBean im ... -
一个完整的Java RMI通讯的例子
2013-02-18 15:16 2258完整的代码,请参考附件。 服务器端: public class ... -
Java使用Selelium的一个例子
2013-02-18 15:11 2599public class TestUserRegister e ... -
Java在字符串中查找需要的字段
2013-02-18 15:06 2047该方法可以将一段字符串中特定的字符取出: 例如:aaaaa[T ... -
Java 定时器 5秒钟后自动退出
2013-02-18 15:02 3793一个简易的Java定时器方法, 5秒钟后退出。 privat ... -
利用Applet请求服务
2013-02-18 14:32 1890public class ConnectionHelper { ... -
一个实用的工具类(不断添加)
2012-07-02 16:37 1365目前有的功能: 1. 将一个文件的所有内容读取的字符串。 2. ... -
Java 将首字母大写变小写
2012-06-28 15:24 15950class Test { public static ... -
Java利用split分割ip
2012-02-24 15:26 3557public void test() { Strin ... -
Java调用sh文件
2012-01-30 13:59 8340其实java调用linux下的sh文件,和调用windows下 ... -
SimpleDateFromat的用法
2011-09-26 17:11 29432008-11-05 15:57Date类内部既不存储年月日也 ... -
将异常(getStackTrace)转化成String
2011-08-01 15:27 16570private static String getStackM ... -
freemaker 遍历list嵌套map
2011-06-15 17:42 7751有这样一个数据结构List<Map<String, ... -
Java保留小数点后几位
2011-06-01 10:26 45201.(double) (Math.round(sd3*1000 ... -
Java Object类中方法理解
2011-03-28 16:08 4634Object类中,共有12个方法,对这些方法的理解程度直接关系 ... -
Java 利用replaceAll 替换中括号
2011-03-03 11:05 22211Java的replaceAll函数默认是不能替换中括号的,例如 ... -
Java 访问(复制,粘贴)剪切板
2011-03-03 10:04 8531以下共有4个函数分别是: 1.从剪切板获得文字。 2.将字符串 ... -
Java 打开文件夹(Windows文件夹)
2011-02-21 12:51 19770利用JavaIO操作文件大家都很熟悉,不过利用Java打开一个 ... -
java 获得网络资源
2011-02-09 11:42 2492java在网络上请求地址,都会用到URL url = new ...
相关推荐
标题中的“实现Swing的JTables和Excel间的复制和粘贴功能”指的是在Java Swing应用中,使用JTable组件与Microsoft 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...
内容概要:本文详细介绍了基于TMS320F系列芯片的C2000串口读写方案及其编程器——FlashPro2000的功能特点和支持的接口模式。文中不仅涵盖了硬件连接的具体步骤,还提供了代码实例来展示Flash擦除操作,并对比了JTAG和SCI-BOOT两种模式的优缺点。此外,针对不同型号的C2000系列芯片,给出了详细的适配指导以及避免烧录过程中可能出现的问题的方法。 适合人群:从事DSP开发的技术人员,尤其是对TI公司C2000系列芯片有一定了解并希望深入了解其编程和烧录细节的人群。 使用场景及目标:适用于实验室环境下的程序调试阶段,以及生产线上的批量烧录任务。主要目的是帮助开发者选择合适的编程工具和技术手段,提高工作效率,减少因误操作导致设备损坏的风险。 其他说明:文中提供的代码片段和命令行指令可以直接用于实际项目中,同时附带了一些实用技巧,如防止芯片变砖的小贴士和自动化重试脚本,有助于解决常见的烧录难题。
汉字字库存储芯片扩展实验 # 汉字字库存储芯片扩展实验 ## 实验目的 1. 了解汉字字库的存储原理和结构 2. 掌握存储芯片扩展技术 3. 学习如何通过硬件扩展实现大容量汉字字库存储 ## 实验原理 ### 汉字字库存储基础 - 汉字通常采用点阵方式存储(如16×16、24×24、32×32点阵) - 每个汉字需要占用32字节(16×16)到128字节(32×32)不等的存储空间 - 国标GB2312-80包含6763个汉字,需要较大存储容量 ### 存储芯片扩展方法 1. **位扩展**:增加数据总线宽度 2. **字扩展**:增加存储单元数量 3. **混合扩展**:同时进行位扩展和字扩展 ## 实验设备 - 单片机开发板(如STC89C52) - 存储芯片(如27C256、29C040等) - 逻辑门电路芯片(如74HC138、74HC373等) - 示波器、万用表等测试设备 - 连接线若干 ## 实验步骤 ### 1. 单芯片汉字存储实验 1. 连接27C256 EPROM芯片到单片机系统 2. 将16×16点阵汉字字库写入芯片 3. 编写程序读取并显示汉字 ### 2. 存储芯片字扩展实验 1. 使用地址译码器(如74HC138)扩展多片27C256 2. 将完整GB2312字库分布到各芯片中 3. 编写程序实现跨芯片汉字读取 ### 3. 存储芯片位扩展实验 1. 连接两片27C256实现16位数据总线扩展 2. 优化字库存储结构,提高读取速度 3. 测试并比较扩展前后的性能差异 ## 实验代码示例(单片机部分) ```c #include <reg52.h> #include <intrins.h> // 定义存储芯片控制引脚 sbit CE = P2^7; // 片选 sbit OE = P2^6; // 输出使能 sbit
测控装备干扰源快速侦测系统设计研究.pdf
嵌入式八股文面试题库资料知识宝典-【开发】嵌入式开源项目&库&资料.zip
嵌入式八股文面试题库资料知识宝典-百度2022年嵌入式面试题.zip
少儿编程scratch项目源代码文件案例素材-空间站.zip
基于关联规则的商业银行个性化产品推荐.pdf
嵌入式八股文面试题库资料知识宝典-Linux基础使用.zip
内容概要:本文详细介绍了利用MATLAB进行轴棱锥生成贝塞尔高斯光束及环形光束光强图像的仿真研究。首先阐述了实验的背景与目标,强调了MATLAB在光学和计算科学领域的广泛应用。接着,具体描述了实验的方法与步骤,包括材料准备、仿真过程中的参数设定和光束生成代码编写。最后,对实验结果进行了深入分析,展示了贝塞尔高斯光束和环形光束的光强分布特点,验证了其光学性能的预期表现。文章还对未来的研究方向和技术改进提出了展望。 适合人群:从事光学、物理学及相关领域研究的专业人士,特别是对光束生成和光学性能分析感兴趣的科研工作者。 使用场景及目标:适用于需要进行光束生成和性能分析的实验室环境,旨在帮助研究人员更好地理解和优化光束特性和传播行为。 其他说明:本文不仅提供了详细的实验方法和步骤,还附有丰富的实验结果和数据分析,为后续研究提供了宝贵的参考资料。
内容概要:本文探讨了三电平NPC型有源电力滤波器(APF)的模型预测控制(MPC)中存在的开关频率过高问题及其解决方案。传统MPC方法会导致极高的开关频率,增加了系统的能耗和热量。通过引入滞环控制模块,可以在不大幅牺牲性能的情况下有效降低开关频率。具体来说,滞环控制通过在价值函数计算后增加一个判断条件,对状态切换进行惩罚,从而减少不必要的开关动作。实验结果显示,开关频率从4392Hz降至3242Hz,降幅达26.2%,虽然电流总谐波畸变率(THD)略有上升,但仍符合国家标准。此外,文中还提出了动态调整滞环宽度的方法,以进一步优化不同负载条件下的表现。 适合人群:从事电力电子、电力系统控制领域的研究人员和技术人员,特别是关注APF和MPC技术的人群。 使用场景及目标:适用于需要优化APF系统开关频率的研究和工程项目,旨在提高系统效率并降低成本。目标是在不影响系统性能的前提下,显著降低开关频率,减少能量损失和热管理难度。 其他说明:文章不仅提供了理论分析,还包括具体的实现代码片段,有助于读者理解和实践。同时,强调了在实际应用中需要注意的问题,如中点电位漂移等。
内容概要:本文介绍了三维POD DMD程序在处理原网格数据方面的独特优势和技术细节。首先阐述了该程序能读取结构化和非结构化网格数据及其拓扑关系,在生成模态数据过程中保持原始网格形态而不需要进行网格插值操作。接着展示了简化版本的Python代码片段,揭示了读取网格数据和生成模态数据的核心逻辑。最后提到提供的辅助学习资料如代码、视频教程、Word教程和实例数据,帮助用户深入理解并掌握该程序的应用。 适合人群:从事计算流体力学领域的研究人员和技术爱好者,尤其是那些希望提高数据处理效率的人群。 使用场景及目标:适用于需要处理复杂网格数据的研究项目,旨在简化数据处理流程,提升工作效率,同时保持数据的原始特性。 其他说明:文中不仅提供了理论性的讲解,还有具体的代码示例和丰富的学习资源,使读者可以边学边练,快速上手。
融合双向路由注意力的多尺度X光违禁品检测.pdf
嵌入式八股文面试题库资料知识宝典-Linux_Shell基础使用.zip
嵌入式八股文面试题库资料知识宝典-联发科2021武汉嵌入式软件开发.zip
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-ARM常见面试题目.zip