package com.excel;
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 + "atrow="
+ startRow + i + "column=" + startCol + j);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
/**
* Frame1.java
* com.excel
*
* Function: TODO
*
* ver date author
* ──────────────────────────────────
* Apr 14, 2011 程仁银
*
* Copyright (c) 2011, All Rights Reserved.
*/
package com.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文件导入导出类,支持Excel2003到2010的格式。里面也有简单的配置文件的创建。
此代码为java运用poi3.8插件实现运用模版导入导出复杂excel
java Swing 读取xml并导出Excel java Swing 读取xml并导出Excel
java swing 导出Jtable里面的数据到excel,不用拷贝代码,直接粘贴代码
适合初学者学习使用。里面包含所有的资源文件。谢谢下载!!!
基于java的开发源码-Java swing仿qq聊天软件.zip 基于java的开发源码-Java swing仿qq聊天软件.zip 基于java的开发源码-Java swing仿qq聊天软件.zip 基于java的开发源码-Java swing仿qq聊天软件.zip 基于java的开发...
基于java的开发源码-swing-explorer(Swing开发辅助工具).zip 基于java的开发源码-swing-explorer(Swing开发辅助工具).zip 基于java的开发源码-swing-explorer(Swing开发辅助工具).zip 基于java的开发源码-swing-...
Manning - Java Swing 2nd Edition - 2005 感谢我吧,绝对好使的!!!最新版的
深入浅出JAVASwing程序设计1-100_split_2.rar深入浅出JAVASwing程序设计1-100_split_2.rar深入浅出JAVASwing程序设计1-100_split_2.rar深入浅出JAVASwing程序设计1-100_split_2.rar
JavaSwing_O-Reilly英文版,好看的东西要分享
swing-Java游戏.zipswing-Java游戏.zipswing-Java游戏.zip swing-Java游戏.zipswing-Java游戏.zipswing-Java游戏.zip swing-Java游戏.zipswing-Java游戏.zipswing-Java游戏.zip swing-Java游戏.zipswing-Java游戏....
swing-layout-1.0.jar , Eclipse 下 Java UI开发必备。
java Swing 上传文件-------------------------------------------------------------------------------------------------------------------------------------------------------
Swing插件,swing,java-swing swing-plugin下载
java-swing-tips, 包含 Java Swing的示例 java-swing-tips英语: 使用小源代码示例介绍 Java Swing的GUI 程序。 许可证https://github.com/aterai/java-swing-tips/blob/master/L
JavaSwing界面设计(所有控件及示例)
Swing星际争霸-java编写.学习JAVA的好实例。
swing-layout-1.0.4.jar是java用于图形界面swing开发的jar包