当前位置:  技术问答>java相关

java 中如何管理剪贴板里的内容

    来源: 互联网  发布时间:2015-03-31

    本文导语:  我制作了一个JTABLE,我在TABLE上按CTRL+C时它会复制一些程序上的语句到剪贴板上,而我在TABLE上按CTRL+V时,它并不会自动新增加一行来复制刚才的内容,而是改变当前聚焦的那个一小格的内容为剪贴板里那些代码语句...

我制作了一个JTABLE,我在TABLE上按CTRL+C时它会复制一些程序上的语句到剪贴板上,而我在TABLE上按CTRL+V时,它并不会自动新增加一行来复制刚才的内容,而是改变当前聚焦的那个一小格的内容为剪贴板里那些代码语句。
如果有人解答了上面的问题最好,如果解决不了,请告诉我如何清空剪贴板里的内容,并且在按CTRL+V时不会影响TABLE,就是不会把剪贴板里清空的内容复制到TABLE里面去,谢谢。
如果不满意分数量,请告知,我会另外散分的。

|
     
实现 Swing 的 JTables 和 Excel 间的复制和粘贴功能
此适配器可以轻松地将数据从一种电子表格中移动到另一种电子表格中

Ashok Banerjee 和 Jignesh Mehta
JavaWorld 专栏作家
1999 年 9 月
  
      
 内容: 
 
 
 代码 
 示例应用程序 
 Excel 的剪贴板格式 
 简要解释 
 结论 
 参考资料 
 作者简介 
 

JTable 和 Excel 图表是常被用在网格或表格中显示数据。通常,用户希望输入到 JTable 的数据已经存在于 Excel 电子表格中。Excel 格式使用在非 Excel 软件中来实现导入-导出功能。因为如此,Java 软件也应该提供通用的剪贴板功能,例如在 JTable 和 Excel 间复制和粘贴。本文展示了如何使用系统粘贴板在 Java 程序和 Excel 间复制数据。使用这一 Java 技巧中提供的适配器类,只需一行代码即可添加在 JTables 和 Excel 间复制和粘贴信息的功能。请注意,由于未签名的 applet 不能使用系统剪贴板,此功能不适用于这些 Java 程序。 

当今很多业务应用程序都是使用 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

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java 中能不能在文件前面添加些内容?不覆盖原内容!
  • Java菜鸟想学Java,请高手指教!(内有内容)
  • Java中,给已存在的文件添加内容,但不覆盖文件原有内容,该如何操作
  • Java内容网站开发框架 Jease
  • Java 网络编程有些什么内容?
  • Java 内容管理系统 OpenWGA
  • Java内容库存取 Shotoku
  • Java内容管理系统 dotCMS
  • 万分火急!怎样将Jsp页面的内容(主要是查询出的表的内容)传递给一个Java类?
  • java自动根据文件内容的编码来读取避免乱码
  • Java的内容管理系统 jspxcms
  • 程序员大本营2001 for java都有啥内容啊?
  • 请问在java sdk中如何查看classpath的内容?
  • 请问java怎样在文件末尾追加内容?
  • 小弟请教各位高手,在JAVA中通过什么函数能获得Button的标签内容?
  • 怎样把整张网页内容当作一副图形(只能作为图像,因为可能网页中有图)传给控制打印的Java程序?
  • Java内容管理系统 InfoGlue
  • 怎么用java script判断是用户输入的字符串内容是正确的日期格式
  • 数据库 iis7站长之家
  • 那位能提供java applet实现的目录树(内容来自数据库)的源码?
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3