- 浏览: 3134976 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (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 2259完整的代码,请参考附件。 服务器端: 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 16571private 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...
内容概要:本文探讨了高比例可再生能源接入对电力系统调峰能力的影响,提出了一种基于净负荷波动的调峰成本量化与分摊模型。首先,通过将负荷和可再生能源出力曲线转换为无波动的均值线,构建了无调峰需求的替代场景。接着,建立了含深度调峰和抽水蓄能的调度优化模型,用于计算不同场景下的调峰成本。通过比较有无调峰需求两种场景下的系统调峰成本,确定了单一主体导致的边际调峰成本,并采用Shapley值方法合理分摊调峰成本。研究表明,该模型可以有效反映各主体的调峰成本或贡献,有助于促进可再生能源的消纳和电力系统的稳定运行。 适合人群:从事电力系统规划、运营管理和可再生能源研究的专业人士,以及关注能源政策和技术发展的研究人员。 使用场景及目标:适用于评估和优化高比例可再生能源接入条件下的电力系统调峰成本,旨在提高电力系统的灵活性和经济性,同时促进可再生能源的有效利用。 其他说明:该模型需要根据实际情况进行调整和优化,以适应不同地区的电力市场特点和技术水平。
内容概要:本文详细介绍了如何使用博图V16进行ABB机器人的外部启动及其与西门子设备的Profinet通讯配置。首先概述了ABB机器人和博图V16的基本概念,接着深入讲解了外部启动的重要性和实现方式,重点介绍了FB功能块的应用,以及Profinet通讯的具体配置步骤。文中还强调了GSD文件的作用,用于描述机器人的属性和行为,最后讨论了硬件配置的要求和注意事项,特别是对dsqc1030或dsqc652板卡的支持和888-2或888-3选项的需求。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些负责机器人集成和编程的专业人士。 使用场景及目标:适用于需要将ABB机器人与西门子设备通过Profinet网络进行通讯并实现外部启动的项目。目标是提高自动化生产线的灵活性和效率,确保机器人和PLC之间的无缝协作。 其他说明:本文不仅提供了理论指导,还包含了实际操作中的关键细节,有助于读者快速掌握相关技能并在实践中应用。
scratch少儿编程逻辑思维游戏源码-3D环境.zip
少儿编程scratch项目源代码文件案例素材-泼溅猫.zip
内容概要:本文介绍了基于EMD-ARMA的组合风光出力预测方法,详细阐述了经验模态分解(EMD)和自回归移动平均(ARMA)模型的应用步骤。首先,通过EMD将原始发电数据分解为多个本征模态函数(IMF),然后用ARMA模型对各IMF分量进行建模和预测,最后将预测结果叠加重构,获得最终的风光功率预测值。文中还提供了简化的Python代码示例,帮助读者理解和实现该方法。 适合人群:从事新能源研究和技术开发的专业人士,尤其是对风光发电预测感兴趣的科研人员和工程师。 使用场景及目标:适用于需要提高风光发电预测精度的项目,旨在通过先进的数学模型优化电力调度和资源配置。 其他说明:本文提供的代码示例仅用于教学目的,实际应用中需根据具体情况调整和完善。此外,建议在实践中参考更多专业文献和寻求专家意见以确保预测模型的准确性和可靠性。
scratch少儿编程逻辑思维游戏源码-scratch RPG 战斗.zip
scratch少儿编程逻辑思维游戏源码-窗户冒险.zip
scratch少儿编程逻辑思维游戏源码-FC经典游戏 沙罗曼蛇.zip
少儿编程scratch项目源代码文件案例素材-跑酷版《我的世界》.zip
scratch少儿编程逻辑思维游戏源码-抜刀.zip
内容概要:本文介绍了永磁同步电机(PMSM)无位置传感器控制的一种创新方法,重点探讨了通过反电动势估计和扰动观测器增益设计来实现转子位置的精确估算。该方法避免了传统的PLL等位置观测器,仅需一次反正切计算即可获得转子位置,极大简化了系统复杂度。此外,模型控制器采用离散域设计,便于参数调整和适应不同电机参数。文中还提供了具体的Python代码示例,展示了从初始化电机参数到主循环控制的具体实现步骤。 适合人群:从事电机控制系统设计的研究人员和技术工程师,尤其是关注永磁同步电机无传感器控制领域的专业人士。 使用场景及目标:适用于需要简化调试流程、提高系统灵活性和适应多种电机参数的应用场景。主要目标是在保持高性能的同时降低硬件成本和系统复杂性。 其他说明:该方法不仅简化了调试过程,还提高了系统的鲁棒性和可靠性,特别适合于工业自动化、机器人技术和电动汽车等领域。
内容概要:本文深入探讨了乘用车双腔制动主缸的精细化建模及其在Simulink和Amesim中的联合仿真验证。文章首先介绍了双腔制动主缸的物理结构和动力学方程,特别是考虑了液压特性和机械传动的耦合关系。接着,作者详细描述了如何在Simulink中实现这些模型,并通过S函数处理变步长积分问题,确保仿真精度。此外,还讨论了联合仿真过程中遇到的数据交换频率问题,并提出了使用二阶保持器来补偿相位滞后的解决方案。最终,通过对不同推杆力输入条件下的仿真结果对比,验证了精细化模型的有效性和稳定性。 适合人群:从事汽车制动系统研究的技术人员、高校相关专业师生、对车辆动力学仿真感兴趣的工程师。 使用场景及目标:①帮助研究人员更好地理解和掌握双腔制动主缸的工作原理;②为后续更复杂的整车制动系统仿真提供可靠的子系统模型;③提高仿真精度,减少因模型简化带来的误差。 其他说明:文中提供了详细的建模步骤、公式推导、代码实现以及仿真结果对比,附带完整视频教程和参考资料,便于初学者学习。同时强调了实际应用中需要注意的关键细节,如流量计算、数据交换频率调整等。
scratch少儿编程逻辑思维游戏源码-Scratch版Windows11.zip
少儿编程scratch项目源代码文件案例素材-青蛙.zip
内容概要:本文详细介绍了光伏交直流混合微电网在离网(孤岛)模式下的双下垂控制仿真模型。该模型利用Matlab/Simulink工具进行构建和仿真,涵盖了直流微电网、交流微电网以及互联变换器(ILC)的结构和控制策略。直流微电网采用电压电流双闭环下垂控制,交流微电网则通过恒压控制和下垂控制来维持稳定的频率和电压。ILC采用双下垂控制策略,通过归一化处理和偏差调整,使得交流母线频率和直流母线电压趋于一致。此外,模型还包括采样保持、坐标变换、功率滤波、SVPWM等辅助环节,以确保系统的稳定运行和高效能量管理。实验结果显示,在负载突增的情况下,系统依然能够保持良好的波形质量和稳定性。 适合人群:对微电网控制系统感兴趣的科研人员、电力工程技术人员及高校师生。 使用场景及目标:适用于研究和验证光伏交直流混合微电网在离网模式下的控制策略,特别是双下垂控制的应用效果。目标是提升微电网的稳定性和能量管理效率。 其他说明:仿真环境为Matlab2020b及以上版本,部分模块仅支持高版本软件。对于希望深入了解双下垂控制机制的研究者,可以通过进一步的学习和交流获得更多信息。
内容概要:本文详细介绍了基于扩展卡尔曼滤波器(EKF)的INS(惯性测量单元)和GPS(全球定位系统)松组合导航技术。首先解释了为何需要松组合导航,即通过融合INS和GPS的优势,提高定位的稳定性和准确性。接着阐述了15状态下的EKF融合方法,涵盖速度、姿态、位置等多个系统动态参数的估计与更新。然后讨论了NED(北东地)坐标系的应用及其带来的直观物理意义。最后提供了简化的Python代码片段,演示了如何在EKF中融合INS和GPS数据,以获得连续、稳定的导航结果。 适合人群:从事导航技术研发的专业人士,尤其是对EKF、INS、GPS以及多传感器数据融合感兴趣的工程师和技术研究人员。 使用场景及目标:适用于需要高精度、高可靠性定位系统的应用场景,如自动驾驶汽车、无人机飞行控制系统等。目标是通过融合INS和GPS数据,克服单一传感器的局限性,提升整个导航系统的性能。 其他说明:文中提供的代码仅为概念验证性质,实际工程应用中还需考虑更多复杂的因素和优化措施。