Java JFrameexcel 按钮 单击事件事件创建编辑 excel 文件, 无法打开文件,显示资源被占用.

如何在Java项目中调用excel的表格控件? - ITeye问答
我要完成一个简单报表的设计,技术上的问题很多,目前就是如何在我的程序中调用excel的表格控件,让我的程序能显示出像excel那样的表格,然后我再去编辑,保存什么的。
请问如何调用呢?是要下个什么插件吗?还是直接有专门的语句调用呢?
当然我想的不仅仅是调用excel的表格控件,还有它的工具控件。
以此延伸的问题,我怎么调用word,系统等里的控件呢?
还是有pageoffice吧,可以在线编辑excel,还可以编程操作excel文件中的数据
直接用帆软报表就OK了,因为它是类excel设计的,所以各种界面都是和excel类似,也具有excel的相应功能
楼上两位都没有看到作者是发布在Swing版面的。
可参考如下文章。
swing实现
http://topic.csdn.net/u//01eff963-2538-48dc-a38f-4cbf2cc52837.html?90746
或者使用报表工具嵌入到JFrame中,例如ireport等工具支持Excel,word等多种格式
看看这个例子 希望对你有帮助!
package com.cari.web.
import java.io.F
import java.io.FileOutputS
import java.io.IOE
import java.io.OutputS
import java.util.I
import java.util.L
import jxl.W
import jxl.write.L
import jxl.write.WritableCellF
import jxl.write.WritableF
import jxl.write.WritableS
import jxl.write.WritableW
import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseE
import com.sun.xml.internal.bind.v2.model.core.ClassI
public class outecell {
public void exportClassroom(OutputStream os) throws ParseException {
WritableWorkbook wbook= Workbook.createWorkbook(os); //建立excel文件
WritableSheet wsheet = wbook.createSheet("监测报表", 0); //工作表名称
//设置Excel字体
WritableFont wfont = new WritableFont(WritableFont.ARIAL, 10,
WritableFont.BOLD, false,
jxl.format.UnderlineStyle.NO_UNDERLINE,
jxl.format.Colour.BLACK);
WritableCellFormat titleFormat = new WritableCellFormat(wfont);
String[] title = { "通道名称", "特征值类型", "最大值", "最小值","平均值" };
//设置Excel表头
for (int i = 0; i & title. i++) {
Label excelTitle = new Label(i, 0, title[i], titleFormat);
wsheet.addCell(excelTitle);
int c = 1; //用于循环时Excel的行号
//ClassroomService cs = new ClassroomService();
List jiancebaobiao=
//List list = cs.findAllClassroom(); //这个是从数据库中取得要导出的数据
Iterator it = jiancebaobiao.iterator();
while (it.hasNext()) {
&&&&&&& ClassroomDTO crdto = (ClassroomDTO) it.next(); //对象
Label content1 = new Label(0, c, crdto.getRoomname());
Label content2 = new Label(1, c, crdto.getCapicity().toString());
Label content3 = new Label(2, c, crdto.getRoomTypeId().toString());
Label content4 = new Label(3, c, crdto.getRemark());
wsheet.addCell(content1);
wsheet.addCell(content2);
&&& wsheet.addCell(content3);
wsheet.addCell(content4);
wbook.write(); //写入文件
wbook.close();
os.close();
} catch (Exception e) {
throw new ParseException("导出文件出错", 1);
public static void main(String[] args) {
&& File f=new File("F://监测报表.xls");
f.createNewFile();
new outecell().exportClassroom(new FileOutputStream(f));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
用java.lang.Runtime来处理,具体能不能调用excel,word之类的,还没没试过。但是我想应该是可以的!
以下是调用记事本
Runtime rt = Runtime.getRuntime();
rt.exec("cmd.exe /k start notepad");//调用记事本
以下是别人写的调用windows系统工具,http://blog.csdn.net/54powerman/archive//649086.aspx
你可以参考一下,急需分数!!!!!
由于工作中要使用Java调用4U Wma Mp3 Converter命令行将vox格式转换成WMA格式,以方便在网页中试听,所以想到用java.lang.Runtime来处理这个问题。在使用过程中碰到了一些以前没有留意的问题,整理如下:
一 最简单的调用方式
String cmd="WMAMP3Converter.exe";
java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");
总结:此方法,要求可执行文件在Tomcat的工作目录中。一般的,程序安装目录都在Tomcat目录之外,所以使用绝对路径来替代以上方案。
二 使用全路径调用可执行文件
String cmd="C:\\WMA\\WMAMP3Converter.exe";
java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");
总结:此调用方式执行没有问题,后来测试完成后部署到服务器上,发现问题又出来了,程序执行错误。分析原因,因为本地测试和服务器安装路径不同,服务器安装软件的目录为C:\Program Files\4U Computing\WMA MP3 Converter\,这里路径里有空格,造成空格处断开,所以命令行无法正确截取参数。
三 安全的全路径方式调用执行文件
String cmd="\"C:\\Program Files\\4U Computing\\WMA MP3 Converter\\WMAMP3Converter.exe\"";
java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");
总结:在cmd串中,把可执行文件的全路径用双引号包含,就可以解决路径、文件名中包含空格、全角字符等问题。
程序运行一段时间以后,发现有时候程序执行完后转换文件没有,程序没有错误,而且服务器上有很多进程没有结束。原来调用可执行文件失败了,但是程序不知道,以为成功了,然后继续去找转换后的文件来播放导致失败。分析原因,是因为上面的方式异步的,也就是说java提交运行文件的命令以后,立即转到播放模块。
解决办法就是让命令行同步方式执行,也就是主程序等待调用可执行文件结束以后再执行。(注:当然,播放之前检查文件是否存在也是可以的,这里是说明同步异步的问题。)
四 异步方式调用外部可执行文件
Process process=
String cmd="\"C:\\Program Files\\4U Computing\\WMA MP3 Converter\\WMAMP3Converter.exe\"";
process = java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");
process.waitFor();
总结:构造一个Process对象,将运行进程获取过来,控制这个进程等待调用结束再继续运行。OK。
五 顺便说一下,使用Process对象以后,可以用如下方法返回错误信息和输出信息,来进一步控制进程运行。
process.exitValue()
process.getErrorStream()
process.getInputStream()
process.getOutputStream()
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/54powerman/archive//649086.aspx
已解决问题
未解决问题博客分类:
思想:获取文件选择对话框中“文件名”显示栏的组件,设置组件不可编辑。
import java.awt.C
import java.awt.C
import javax.swing.*;
* java文件选择对话框
* 文件名不可编辑
public class JFileChooserUI {
private static JLabel findLabel(JComponent comp, String s) {
JLabel label =
if (comp instanceof JLabel) {
if (((JLabel) comp).getText().equals(s)) {
label = (JLabel)
} else if (comp instanceof JComponent) {
Component[] comps = comp.getComponents();
for (int i = 0; i & comps. i++) {
if (comps[i] instanceof JComponent) {
label = findLabel((JComponent) comps[i], s);
if (label != null) {
public static Component getLabelForInChooser(JFileChooser chooser, String key) {
java.util.Locale l = chooser.getLocale();
String s = UIManager.getString(key, l);
javax.swing.plaf.FileChooserUI ui = chooser.getUI();
int count = ui.getAccessibleChildrenCount(chooser);
for (int i = 0; i & i++) {
javax.accessibility.Accessible a =
ui.getAccessibleChild(chooser, i);
JLabel label = findLabel((JComponent) a, s);
if (label != null) {
return label.getLabelFor();
public static void main(String[] args) {
JFileChooser chooser = new JFileChooser("");
Component comp = getLabelForInChooser(chooser, "FileChooser.fileNameLabelText");
if (comp instanceof JTextField) {
JTextField field = ((JTextField) comp);
field.setEditable(false);
field.setBackground(Color.WHITE);
chooser.showOpenDialog(null);
浏览: 291702 次
来自: 上海
&div class=&quote_title ...
&div class=&quote_title ...
把service借口和java bean打成jar包放到客户端 ...
非常感谢楼主,在网上找了好几个Spring、RMI的代码例子, ...
按照上述步骤配置不成功啊,报java.lang.ClassNo ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
第一章 ASP.NET 教程 (基础)
第二章 ASP.NET 教程(高级)请问你这是在写博客吗?还只是贴东西?弄成这样给自己看啊&&&&java中JFrame窗体按钮添加事件,选择文件路径或者文件夹路径,在控制台输出。
1.选择文件路径输出
package com.
&import java.awt.FlowL
&import java.awt.event.ActionE
&import java.awt.event.ActionL
&import javax.swing.JB
&import javax.swing.JFileC
&import javax.swing.JF
&public class Win& {
&& static JFrame
f& = new JFrame();
&& static JButton jb = new
JButton("上传");
& public void Show() {
&& jb.addActionListener(new
ActionListener() {
&&& public void
actionPerformed(ActionEvent e) {
JFileChooser jfc = new JFileChooser();
if(jfc.showOpenDialog(f)==JFileChooser.APPROVE_OPTION ){
&//解释下这里,弹出个对话框,可以选择要上传的文件,如果选择了,就把选择的文件的绝对路径打印出来,有了绝对路径,通过JTextField的settext就能设置进去了,那个我没写
System.out.println(jfc.getSelectedFile().getAbsolutePath());
&& //这下面的不用在意 一些设置
&& f.add(jb);
&& f.setLayout(new
FlowLayout());
&& f.setSize(480, 320);
f.setDefaultCloseOperation(EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
&& f.setVisible(true);
&public static void main(String[] args) {
&&// TODO Auto-generated method
Win().Show();
2.选择文件夹路径在控制台输出
package com.
import javax.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionE//添加鼠标事件必备引用
import java.awt.event.ActionL//添加鼠标事件必备引用
public class Test {
&// extends JPanel implements ActionListener
&static JFrame frame = new JFrame("");
&static JPanel p = new JPanel();
&JButton jb = new JButton("上传");
&public static void main(String s[]) {
&&new Test().Show();
&public void Show() {
&&jb.addActionListener(new
ActionListener() {
&&&public void
actionPerformed(ActionEvent e) {
&&&&chooser
= new JFileChooser();
&&&&chooser.setCurrentDirectory(new
java.io.File("."));
&&&&chooser.setDialogTitle(choosertitle);
&&&&System.out.println("---"+choosertitle);
&&&&chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
&&&&chooser.setAcceptAllFileFilterUsed(false);
(chooser.showOpenDialog(p) == JFileChooser.APPROVE_OPTION) {
&&&&&System.out.println("getCurrentDirectory():
chooser.getCurrentDirectory());
&&&&&System.out.println("getSelectedFile()
chooser.getSelectedFile());
&&&&&System.out.println("No
Selection ");
//&&frame.addWindowListener(new
WindowAdapter() {
//&&&public void
windowClosing(WindowEvent e) {
//&&&&System.exit(0);
&&p.add(jb);
&&frame.add(p, "Center");
&&frame.setSize(320, 240);
&&frame.setVisible(true);
3.网上找的一些资料说明文件,没事看看。
JFileChooser
其实JFileChooser基本使用方法还是很简单的,下面写两个示例看了就明白了,如果还要增加一些功能,我们还可以添加过滤器,只显示过滤后的文件。还可以再保存的时候,如果保存的是目录里已经存在的文件,那么对话框不会关闭,并且弹出一个JOptionPane提示用户是否保存文件。
打开文件对话框:
import java.io.F
import javax.swing.JFileC
import javax.swing.filechooser.FileF
public class FileChooserTest {
public static void main(String [] args) {
//首先是创建JFileChooser 对象,里面带个参数,表示默认打开的目录,这里是默认打开当前文件所在的目录。
JFileChooser file = new JFileChooser (".");
//下面这句是去掉显示所有文件这个过滤器。
file.setAcceptAllFileFilterUsed(false);
//添加excel文件的过滤器
file.addChoosableFileFilter(new ExcelFileFilter("xls"));
//添加exe文件的过滤器
file.addChoosableFileFilter(new ExcelFileFilter("exe"));
int result = file.showOpenDialog(null);
&& String fileName =
file.getName();
&& int index =
fileName.lastIndexOf('.');
&& if (index & 0 &&
index & fileName.length() - 1)
&&& String
extension = fileName.substring(index + 1).toLowerCase();
(extension.equals(ext))
public String getDescription() {
&& if (ext.equals("xls"))
&&& return
"Microsoft Excel文件(*.xls)";
&& if(ext.equals("exe"))
&&& return
"可执行文件(*.exe)";
&& return "";
打开选择文件的对话框就建立好了。但是上面的程序还有瑕疵。因为只有当用户点取消或关闭该窗口时才不会执行任何操作。而如果用户在对话框里输入的文件在当前目录中不存在时,那么窗口依然会关闭,这时可能就需要在程序中再来做判断。那么可不可以在当用户输入错误的文件名后,窗口不会关闭,而是不执行任何操作或者弹出个对话框提示用户,可以看看大多数window程序中的选择对话框都是这么做的,其实要实现这个功能也不难,
只需要再重写一下JFileChooser类的approveSelection()方法就行了。
我们将上面的程序做下修改,首先还是需要创建一个继承于JFileChooser的类,这个类可以写成外部或者内部类,我们这里依然写为内部类,注意,如果需要在静态方法中调用它,则需要将它设置为静态的。
private static class MyChooser extends JFileChooser {
MyChooser(String path) {
&& super(path);
public void approveSelection() {
&& File file = new
File(getSelectedFile().getPath());
if (file.exists())
super.approveSelection();
JOptionPane.showMessageDialog(null, "你选择的文件不存在,请重新选择!");
把上面这段代码添加进刚才的类里面,然后把
JFileChooser file = new JFileChooser (".");改成
JFileChooser file = new MyChooser (".");
好了,现在我们就可以在不关闭该对话框的情况下判断用户的输入是否错误了。还可以加入正则表达式,判断用户输入是否符合规定,操作方式按照这个框架来写就没问题了。这里不再赘述。下面是保存对话框!
保存对话框:
其实保存对话框和打开文件对话框在使用上没什么区别,他们都是使用同一个类JFileChooser,因为在swing当中打开和保存对话框不会做出任何对文件进行处理的功能,所有的这些功能需要我们自己去实现,而仅仅是提供了1个这样的窗口模型而已。因此这两种窗口其实只是将按钮的标签进行了替换而已
。创建他们唯一的区别就是打开是调用showOpenDialog()方法,保存则是调用showSaveDialog(),创建形式几乎一样。我们在使用他们的时候就需要分别对这两种窗口的返回后进行不同的处理,设置过滤器是一样的,因此过滤器我们就复用上面打开文件窗口的方法,但是在判断输入保存文件是否在当前目录下时,我们需要做出不一样的处理。当用户输入了与当前目录相同的文件名后,要弹出对话框询问用户是否需要覆盖原文件,如果用户选择否,那么返回保存文件的对话框允许用户继续选择或者输入保存的文件名。
下面我只需要修改上面代码的两个地方就能够达到目的。首先将修改一下MyChooser这个类
private static class MyChooser extends JFileChooser {
MyChooser(String path) {
&& super(path);
public void approveSelection() {
&& File file =
this.getSelectedFile();
&& if (file.exists())
&&& int copy =
JOptionPane.showConfirmDialog(null,
"是否要覆盖当前文件?", "保存", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
&&& if (copy ==
JOptionPane.YES_OPTION)
super.approveSelection();
super.approveSelection();
再把上面的
int result = file.showOpenDialog(null);
int result = file.showSaveDialog(null);
两个基本的选择文件对话框就创建完成了。
如果需要多选,那么要设置setMultiSelectionEnabled(true)
那么File file = this.getSelectedFile();这句我们就要改成
File [] files = this.getSelectedFiles();
files这个数组里面就存放的是选择多个文件File对象,然后我们只需要对这个数组进行操作即可。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 excel 按钮事件 的文章

 

随机推荐