2013-11-23 6 views
0

Я разрабатываю приложение-редактор, используя Netbeans. Я написал код для сохранения файла с помощью функции сохранения Jfilechooser, поскольку функция работает исправно. Но у меня есть проблема с написанием кода для простой кнопки сохранения. текущей вкладки. дайте мне некоторое представление о сохранении содержимого текущей вкладки, например, 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, затем в «сохранить» извлеките файл и напишите ему. Вам не нужно ничего делать, кроме добавления поля File в FilePanel и копирования и вставки вашего ввода-вывода из «сохранить как» в «сохранить». – Radiodef

+0

Я пробовал, но я не могу получить правильный адрес файла на сфокусированной вкладке. Я пробовал много, но не смог решить проблему с адресом. любезно помогите мне в записи события сохранения. –

Смежные вопросы