2014-05-17 24 views
1

大家好我正在創建一個簡單的文本編輯器作爲一個項目,當保存輸入爲文件的內容時,我遇到了一些麻煩。我可以使用另存爲原則保存文件,並提供一個對話框提示用戶輸入文件名。如何保存文本文件而不必每次都輸入文件名?

我遇到的問題是實現保存,以便保存到打開的文件,而不必每次都轉到對話框,就像有人按Ctrl + S時一樣。任何人有任何想法我將如何實現此功能?

下面是我的一些代碼:

JMenuItem saveFile = new JMenuItem(new AbstractAction("Save") { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     JFileChooser save = new JFileChooser(); 
     File filename = save.getSelectedFile(); 
     if(opened == false && saved == false) { 
      save.showSaveDialog(null); 
      int confirmationResult; 
      if(filename.exists()) { 
      confirmationResult = JOptionPane.showConfirmDialog(getParent(), "Replace existing file?"); 
       if(confirmationResult == JOptionPane.YES_OPTION) { 
        saveFile(filename);      
       } 
      } else { 
       saveFile(filename); 
      } 
     } else { 
      saveFile(filename); 
     } 
    } 
}); 
saveFile.setPreferredSize(new Dimension(100, 20)); 
saveFile.setEnabled(true); 

保存方法:

private void saveFile(File filename) { 
    try { 
     BufferedWriter writer = new BufferedWriter(new FileWriter(filename)); 
     writer.write(textArea.getText()); 
     writer.close(); 
     saved = true; 
     editorWindow.setTitle("JavaText - " + filename.getName()); 
    } catch (IOException err) { 
     err.printStackTrace(); 
    } 
} 
+3

文件名的存儲位置? –

回答

3

如果你在你的應用程序在一些地方保存打開的文件對象,你可以那麼就傳遞到一個你saveFile的方法使用KeyListener或KeyAdapter按鍵。如果沒有看到更多的應用程序,很難說哪裏最好放置它,但如果你只是將它存儲在某個變量的某處,可以參考它。

1
  1. 存儲的文件名某處
  2. if(nameOfFile != null)則不會顯示對話框,並去救人方法
  3. else顯示對話框,並調用保存方法

這就是我會做

0

下面的程序顯示了'保存'&'另存爲'功能的文本編輯器的實施。運行,則顯示的JFrame的JTextArea,保存JButton的 &另存爲的JButton

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 

import javax.swing.JButton; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 

public class MyFrame extends JFrame { 

    private boolean alreadySaved = false; 
    private BufferedWriter bw; 
    private JFileChooser fileChooser; 
    private JTextArea jta; 
    private File file; 
    private JButton save; 
    private JPanel mainPanel; 
    private JButton saveAs; 

    public MyFrame() { 
     initComponents(); 

     save.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       if (!alreadySaved) { 
        int response = fileChooser.showSaveDialog(getParent()); 
        file = fileChooser.getSelectedFile(); 
        if (response == JFileChooser.APPROVE_OPTION) { 
         writeFile(); 
         alreadySaved = true; 
        } 
       } else 
        writeFile(); 
      } 

     }); 

     saveAs.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       int response = fileChooser.showSaveDialog(getParent()); 
       file = fileChooser.getSelectedFile(); 
       if (response == JFileChooser.APPROVE_OPTION) { 
        writeFile(); 
        alreadySaved = true; 
       } 
      } 
     }); 

    } // END of Constructor 

    public void writeFile() { 
     try { 
      bw = new BufferedWriter(new FileWriter(file)); 
      bw.write(jta.getText()); 
      bw.flush(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    private void initComponents() { 
     fileChooser = new JFileChooser(); 
     saveAs = new JButton("Save as"); 
     jta = new JTextArea(10, 40); 
     mainPanel = new JPanel(); 
     mainPanel.setBackground(Color.red); 
     save = new JButton("Save"); 
     mainPanel.add(save); 
     mainPanel.add(saveAs); 
     this.setLayout(new BorderLayout()); 
     this.add(jta); 
     this.add(mainPanel, BorderLayout.SOUTH); 
     this.pack(); 
     this.setLocationRelativeTo(null); 
    } 

    public static void main(String[] args) { 
     new MyFrame().setVisible(true); 
    } 
} 
相關問題