2015-06-14 88 views
2

我试图实现工资单生成器。我已经有了我的GUI,可以在单独的JPanel上生成工资单。当我点击“另存为PNG”按钮时,它当前将Jpanel保存为项目文件夹内的png文件。但我希望它可以在保存时指定文件路径和文件名。这是我迄今为止所做的。将JPanel保存到PNG文件

public static BufferedImage getScreenShot(Component component) { 
    BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_RGB); 
    component.paint(image.getGraphics()); 
    return image; 
} 

public void saveScreenShot(Component component, String fname) throws Exception { 

    BufferedImage img = getScreenShot(component); 
    ImageIO.write(img, "png", new File(fname)); 
} 
private void SaveAsPNGButtonActionPerformed(java.awt.event.ActionEvent evt) {             

    try { 
     saveScreenShot(PaySlip, "My panel Image.png"); 
    } catch (Exception e) { 

    } 
} 

我希望它是类似下面的代码。这是我用来将搜索结果从Jtable保存到文本文件。

private void Export2TextActionPerformed(java.awt.event.ActionEvent evt) {            

    try { 
     JFileChooser fc = new JFileChooser(); 
     int option = fc.showSaveDialog(SearchEmployeeGUI.this); 
     if (option == JFileChooser.APPROVE_OPTION) { 
      try { 
       String filename = fc.getSelectedFile().getName(); 
       String path = fc.getSelectedFile().getParentFile().getPath(); 

       int len = filename.length(); 
       String ext = ""; 
       String file = ""; 

       if (len > 4) { 
        ext = filename.substring(len - 4, len); 
       } 

       if (ext.equals(".txt")) { 
        file = path + "\\" + filename; 
       } else { 
        file = path + "\\" + filename + ".txt"; 
       } 
       FileWriter fw = new FileWriter(file); 
       BufferedWriter bw = new BufferedWriter(fw); 
       bw.write("Employee ID  First Name  Last Name  Gender  Contact No  Email  Date of Join  Designation  Basic Salary"); 
       bw.newLine(); 
       bw.write("--------------------------------------------------------------------------------------------------------------------------------------------"); 
       bw.newLine(); 

       for (int i = 0; i < EmployeeTable.getRowCount(); i++) { 
        for (int j = 0; j < EmployeeTable.getColumnCount(); j++) { 
         bw.write(EmployeeTable.getModel().getValueAt(i, j) + " "); 
        } 
        bw.newLine(); 

       } 
       bw.close(); 
       fw.close(); 
       int answer = JOptionPane.showConfirmDialog(null, "Would you like to open the exported file?", "Successfully exported!", option); 
       if (answer == JOptionPane.YES_OPTION) { 
        try { 
         Desktop dt = Desktop.getDesktop(); 
         dt.open(new File(file)); 

        } catch (Exception e) { 
         JOptionPane.showMessageDialog(null, e); 
        } 
       } 

      } catch (Exception e) { 
       JOptionPane.showMessageDialog(null, e); 
      } 
     } 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
    } 
} 

在这里我可以指定路径和文件名。我想为"Save as png"按钮同样的东西。但我不知道该怎么做。有人可以帮忙吗?提前致谢。

回答

1

您可以使用JFileChooser

   String suggesteddir = "."; 
      String EXTENSION = ".png"; 
      JFileChooser fileChooser = new JFileChooser(suggesteddir); 
      JFrame choose = new JFrame(); 
      choose.setTitle("Save To ..."); 
      int status = fileChooser.showSaveDialog(choose); 
      if (status == JFileChooser.APPROVE_OPTION) 
      { 

       try 
       { 
        File selectedFile = fileChooser.getSelectedFile(); 
        String newfile = selectedFile.getCanonicalPath(); 
        if (!newfile.endsWith(EXTENSION)) { 
         newfile=newfile + EXTENSION; 
        } 

        ImageIO.write(img, "png", new File(newfile)); //write img to file 

       } catch (IOException ex) { 
        ex.printStackTrace(); 

       } 
      }