`
chengyu2099
  • 浏览: 468877 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java Swing 的excel 操作 -导入导出 (原型)

阅读更多
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);
	}
}

分享到:
评论

相关推荐

    java Swing 导入导出Excel文件

    自定义的一个excel文件导入导出类,支持Excel2003到2010的格式。里面也有简单的配置文件的创建。

    java swing开发导入导出excel功能

    此代码为java运用poi3.8插件实现运用模版导入导出复杂excel

    javaswing游戏开发-捕鱼达人

    Java Swing 是Java GUI(图形用户界面)开发的一个关键库,它是Java AWT(Abstract Window Toolkit)的扩展,提供了更丰富的组件和更高级的功能。在这个"javaswing游戏开发-捕鱼达人"项目中,初学者可以深入理解如何...

    java Swing 读取xml并导出Excel(密码:qiyh)

    java Swing 读取xml并导出Excel java Swing 读取xml并导出Excel

    java swing 导出Jtable里面的数据到excel

    java swing 导出Jtable里面的数据到excel,不用拷贝代码,直接粘贴代码

    POI实现Excel导入导出并附带加载进度条

    总之,这个项目是一个完整的Java解决方案,用于处理Excel文件的导入导出,同时具备用户友好的进度条显示。它利用了Apache POI的强大功能,结合maven的依赖管理,以及可能的GUI组件,提供了高效且直观的数据操作体验...

    基于java的开发源码-Java swing仿qq聊天软件.zip

    基于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-explorer(Swing开发辅助工具).zip 基于java的开发源码-swing-...

    swing-layout-1.0.4.jar包

    swing-layout-1.0.4.jar是org.jdesktop.layout,org.jdesktop.layout.GroupLayout类的工具jar包

    JavaSwing_O-Reilly英文版

    JavaSwing_O-Reilly英文版,好看的东西要分享

    swing-Java游戏.zip

    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游戏....

    java Swing 上传文件

    java Swing 上传文件-------------------------------------------------------------------------------------------------------------------------------------------------------

    aspect-swing-worker-1.1.jar.zip

    《深入理解Aspect-Swing-Worker-1.1.jar在Java编程中的应用》 在Java开发领域,库文件的使用是提升代码效率、实现特定功能的关键。今天我们将深度探讨"aspect-swing-worker-1.1.jar.zip"这个压缩包,它包含了一个名...

    基于Java平台的swing-chinese-chess中国象棋设计源码

    本项目为基于Java平台的Swing-Chinese-Chess中国象棋设计源码,包含21个文件,其中包括9个Java源文件、3个偏好设置文件、2个XML配置文件以及若干其他辅助文件。该系统旨在实现一个完整的中国象棋游戏环境。

    Java课程设计---javaswing带GUI界面学生管理系统(源码+sqlite数据库).rar

    【Java课程设计---javaswing带GUI界面学生管理系统】是一个基于Java Swing开发的桌面应用程序,它为用户提供了图形用户界面(GUI)来管理学生信息。这个项目的核心目标是实现一个简单易用的学生信息管理系统,利用...

    学生信息管理系统(javaSwing+excel保存).zip

    《基于JavaSwing和Excel的学生信息管理系统》 在信息技术领域,开发管理信息系统是常见的任务,尤其是在教育行业。本文将深入探讨一个使用JavaSwing技术构建的学生信息管理系统,该系统不仅具备用户友好的图形用户...

    Java Swing 界面美化包-含源码

    Java Swing 是Java标准库中的一个组件,用于创建图形用户界面(GUI)。Swing 提供了丰富的组件集合,如按钮、文本框、菜单等,用于构建桌面应用程序。然而,Swing 的默认界面风格(LookAndFeel)在视觉上可能相对...

    java-swing-tips, 包含 Java Swing的示例.zip

    java-swing-tips, 包含 Java Swing的示例 java-swing-tips英语: 使用小源代码示例介绍 Java Swing的GUI 程序。 许可证https://github.com/aterai/java-swing-tips/blob/master/L

    JavaSwing界面设计(所有控件及示例)

    JavaSwing界面设计(所有控件及示例)

Global site tag (gtag.js) - Google Analytics