2013-11-23 2 views
0

Netbeans를 사용하여 편집기 응용 프로그램을 개발 중입니다. Jfilechooser save 함수를 사용하여 파일을 저장하는 코드가 제대로 작성되었습니다. 하지만 간단한 저장 버튼에 대한 코드를 작성하는 데 문제가 있습니다. 현재 열려있는 탭의 ctrl + s 기능과 같이 현재 탭의 내용을 저장하는 방법을 알려주세요. 여기 내 메소드로 저장하는 코드입니다. 미리 감사드립니다. 파일 저장 및 파일 저장 방법

private void saveAsmActionPerformed(java.awt.event.ActionEvent evt) {           
    // TODO add your handling code here: 
    int returnVal = fileChooser.showSaveDialog(this); 
    if (returnVal == fileChooser.APPROVE_OPTION) 
    { 
    File dir1 = fileChooser.getCurrentDirectory(); 
    String dir = dir1.getPath(); 
    String name = fileChooser.getSelectedFile().getName(); 
    //if it dont have .txt at end of name then add it 
    if (!name.endsWith(".txt")) 
      { 
       name = (name + ".txt"); 
      }  

    try{ 
    File file = new File(dir,name); 
    int res = 0; 

    if(file.exists()) 
    { 
    res = JOptionPane.showConfirmDialog(null, "This file already exists, Overwrite it?"); 
    } 
    if(res == 0) 
    { 

    FileWriter fw = new FileWriter(file); 
BufferedWriter bw = new BufferedWriter(fw); 


    FilePanel selectedComp = (FilePanel)tabbedPane.getSelectedComponent(); 

     if (selectedComp != null) { 
      String text = selectedComp.getTextArea().getText(); 
      bw.write(text); 

     } else { 
      System.out.println("No component selected"); 
     } 

bw.close(); 
    tabbedPane.setTitleAt(tabbedPane.getSelectedIndex(), name); 
    ClosableTab.apply(tabbedPane, tabbedPane.getTabCount()-1); 
    } 

    } 
    catch(Exception e) 
    { 
     System.out.println("err"); 
    } 

    } 
    }  

답변

1

"저장"을 수행 한 후 파일을 필드로 저장 한 다음 "저장"하여 기존 파일에 기록합니다.

public class FilePanel /* extends not sure */ { 
    private File file; 

    ... 

    public File getFile() { return file; } 
    public void setFile(File f) { file = f; } 

    ... 
} 

/* 
* not sure how your event structure works 
* this is the common way to do it 
* 
* @Override 
* public void actionPerformed(ActionEvent evt) { 
*  if (evt.getSource() == saveAsButton) { 
*   saveAsAction(); 
*  } else if (evt.getSource() == saveButton) { 
*   saveAction(); 
*  } 
* } 
* 
*/ 

// recommend refactor so "save" can call "save as" without regard to event 
private void saveAsAction() { 

    int exInput = JOptionPane.NO_OPTION; 
    File file = null; 

    // use a do-while and "no" to reshow the save dialog if exists 

    do { 
     int returnVal = fileChooser.showSaveDialog(null); 

     if (returnVal != JFileChooser.APPROVE_OPTION) { 
      return; 
     } 

     file = fileChooser.getSelectedFile(); 

     if (!file.getName().endsWith(".txt")) { 
      file = new File(file.getParentFile(), file.getName() + ".txt"); 
     } 

     if (file.exists()) { 
      exInput = JOptionPane.showConfirmDialog(
          null, "This file already exists, overwrite it?"); 

      if (exInput == JOptionPane.CANCEL_OPTION) { 
       return; 
      } 
     } 
    } while (file.exists() && exInput == JOptionPane.NO_OPTION); 

    FilePanel selectedComp = (FilePanel)tabbedPane.getSelectedComponent(); 

    if (selectedComp != null) { 
     String text = selectedComp.getTextArea().getText(); 
     file = writeToFile(file, text); 
     selectedComp.setFile(file); 

    } else { 
     System.out.println("No component selected"); 
     return; 
    } 

    tabbedPane.setTitleAt(tabbedPane.getSelectedIndex(), file.getName()); 
    ClosableTab.apply(tabbedPane, tabbedPane.getTabCount() - 1); 
} 

private void saveAction() { 

    FilePanel selectedComp = (FilePanel)tabbedPane.getSelectedComponent(); 

    if (selectedComp != null) { 
     File file = selectedComp.getFile(); 

     if (file == null) { 
      // imply no "save as" performed 

      saveAsAction(); 
      return; 
     } 

     String text = selectedComp.getTextArea().getText(); 
     file = writeToFile(file, text); 
     selectedComp.setFile(file); 

    } else { 
     System.out.println("No component selected"); 
    } 
} 

// recommend refactor so "save" and "save as" can share write code 
private static File writeToFile(File file, String text) { 

    try { 

     FileWriter fw = new FileWriter(file); 
     BufferedWriter bw = new BufferedWriter(fw); 

     bw.write(text); 
     bw.close(); 

     return file; 

    } catch(Exception e) { 
     // handle your IO errors better than this 
     // files are not willy-nilly! 

     System.out.println("err"); 
     return null; 
    } 
} 
+0

코드 예제를 알려주십시오. –

+0

이미 필요한 코드가 모두 있습니다. 귀하의 "다른 이름으로 저장"방법에서 필드를 FilePanel에 저장하고 "저장"을 클릭하여 파일을 검색하고 파일에 저장하십시오. FilePanel에 파일 필드를 추가하고 "다른 이름으로 저장"에서 "저장"으로 IO를 복사하여 붙여 넣는 것 외에는 아무 것도 할 필요가 없습니다. – Radiodef

+0

시도했지만 초점을 맞춘 탭에서 파일의 올바른 주소를 검색 할 수 없습니다. 많은 노력을했지만 주소 문제를 해결할 수 없습니다. 친절하게 저장 이벤트를 작성하는 데 도움이됩니다. –