2017-02-25 87 views
1

我使用Java和Netbeans开发员工工资管理系统。我想打开一个.pdf文件,当我点击打开按钮。如何通过单击按钮打开PDF文档?

但我想单击打开按钮时选择该文件。

我该怎么做?我想使用JFileChooser。如何使用JFileChooser打开PDF文件?

这是打开按钮的代码,但这不完整 - 它不打开PDF。

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
    JFileChooser chooser = new JFileChooser(); 
    chooser.showOpenDialog(null); 
    File f = chooser.getSelectedFile(); 
    filename = f.getAbsolutePath(); 
}           
+0

什么是用于打开该文件的目的是什么?你想在你的程序中预览它还是启动外部应用程序来做一些事情? –

+0

我想在我的程序中预览一个pdf文件.. –

+0

但有一个想法:我希望这个项目只是为了学习;你真的不是真的在这样的系统上工作,在现实世界中使用? – GhostCat

回答

2

两个部分有:

  • 使用文件选择器选择一个文件(你已经得到了)
  • 然后用该文件名与任何一些Java组件,它能够打开/出示PDF文件;或者使用javas ProcessBuilder启动一个新的外部进程,使用Adobe Reader等工具打开该文件。

例如可以找到更多想法here

+0

你能告诉我第二部分的编码吗? –

+2

*“你能告诉我第二部分的编码吗?”*对于第2部分而不是使用'ProcessBuilder',我建议**'Desktop.getDesktop()。open(File)'**。 –

2

您可以使用Desktop.getDesktop().open(new File(path));这样的:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
    openFile(); 
} 

方法使用JFileChooser并打开PDF文件:

private void openFile() throws IOException, ClassNotFoundException { 


    FileFilter fJavaFilter = new FileFilter(); 
    JFileChooser fc = new JFileChooser(); 
    fc.setDialogTitle("Open your file"); 
    fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 
    fc.setCurrentDirectory(new File(".")); 
    fc.setFileFilter(fJavaFilter); 

    int result = fc.showOpenDialog(this); 
    if (result == JFileChooser.CANCEL_OPTION) { 
     //cancel action 
    } else if (result == JFileChooser.APPROVE_OPTION) { 

     //open file using 
     File selectedFile = fc.getSelectedFile(); 
     String path = selectedFile.getAbsolutePath(); 

     File myFile = new File(path); 
     Desktop.getDesktop().open(myFile); 

    } 
} 

编辑

我们使用FileFilter过滤只有我们的扩展我们需要如果你不想使用任何过滤器,你可以评论这两行:

//FileFilter fJavaFilter = new FileFilter(); 
    //.... 
    //fc.setFileFilter(fJavaFilter); 

如果你要使用过滤器,你可以将该类添加到您的项目,或者你可以在同一个类中使用它:

class FileFilter extends javax.swing.filechooser.FileFilter { 

    @Override 
    public boolean accept(File f) { 
     //your filter here 
     return f.getName().toLowerCase().endsWith(".pdf") 
       || f.isDirectory(); 
    } 

    @Override 
    public String getDescription() { 
     return "Select file (*.pdf)"; 
    } 
} 
+0

它显示第一行上的错误..关于这个词FileFilter(); –

+0

查看最新内容@Zunairahbukhari –

+0

非常感谢。你工作 –