2013-03-29 111 views
11

我是Java的初學者。我正在使用它的GUI編輯器在netbeans 7(.3)IDE中製作一個簡單的文本編輯器。我面臨的主要問題是我無法保存/打開文件。我創建了「保存」按鈕。當我刪除文件選擇器時,它將作爲一個常規的打開文件對話框嵌入在Java窗口中,根本沒有任何功能。我也嘗試創建一個新的jFileChooser時點擊保存按鈕(在源視圖),但它不起作用。

使用Swing和Netbeans GUI編輯器保存文件/打開文件對話框

簡而言之,我需要一個簡單的打開/保存對話框。當按下「保存」按鈕時,保存對話框打開並保存用戶選擇任何名稱和.rtf或.txt擴展名的文件。 (PS:是否可以在.docx或.doc中保存Java文件?)
當按下「打開」btn時,它會以.rtf或.txt格式打開文件(可以打開。 docx or .doc in Java?)通過文件選擇器。

private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {           
    JFileChooser saveFile = new JFileChooser(); 
    if saveFile.showSaveDialog(modalToComponent) == JFileChooser.APPROVE_OPTION { 
     File xyz = saveFile.getSelectedFile(); 
    } 
} 

代碼是在這裏:https://docs.google.com/file/d/0B766zz1iJ1LRN2lGRjNtM29vN2M/edit?usp=sharing

+0

後一些代碼,請 – Aboutblank

+0

我們需要看到一些代碼 –

+0

是啊,該代碼沒有在所有幫助,因爲它充滿html標籤.. – Tom

回答

19

我創建了一個示例UI顯示保存並打開文件對話框。點擊保存按鈕打開保存對話框,點擊打開按鈕打開文件對話框。

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class FileChooserEx { 
    public static void main(String[] args) { 
     Runnable r = new Runnable() { 

      @Override 
      public void run() { 
       new FileChooserEx().createUI(); 
      } 
     }; 

     EventQueue.invokeLater(r); 
    } 

    private void createUI() { 
     JFrame frame = new JFrame(); 
     frame.setLayout(new BorderLayout()); 

     JButton saveBtn = new JButton("Save"); 
     JButton openBtn = new JButton("Open"); 

     saveBtn.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       JFileChooser saveFile = new JFileChooser(); 
       saveFile.showSaveDialog(null); 
      } 
     }); 

     openBtn.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       JFileChooser openFile = new JFileChooser(); 
       openFile.showOpenDialog(null); 
      } 
     }); 

     frame.add(new JLabel("File Chooser"), BorderLayout.NORTH); 
     frame.add(saveBtn, BorderLayout.CENTER); 
     frame.add(openBtn, BorderLayout.SOUTH); 
     frame.setTitle("File Chooser"); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 
+0

我如何使這與Windows風格的作品? –

+0

@AalaaMohamed窗口風格? – Amarnath

+1

我的意思是windows操作系統上的digalog box風格,因爲這段代碼使得一個類似於Mac上的一個digalog box。 –

3

我想你面臨三個問題:

  1. 理解文件選擇
  2. 讀/寫文件
  3. 理解的擴展和文件格式

廣告1.您確定您已將FileChooser連接到正確的面板/容器嗎?我會去找一個關於這個問題的簡單教程,看看它是否有效。這是學習的最佳方式 - 通過向前邁出小而足夠的步驟。將問題分解成這樣的部分可能有時是棘手的;)

ad。 2.保存或打開文件後,應該有寫入或讀取文件的方法。再次,在這個問題上有非常簡潔的例子,並且很容易理解主題。

ad。 3.具有擴展名和文件格式的文件是有區別的。您可以將任何文件的格式更改爲任何您想要的內容,但不影響其內容。它可能只會使與該擴展名關聯的應用程序無法讀取文件。 TXT文件很容易 - 你讀了你寫的東西。 XLS,DOCX等需要更多的工作,通常框架是解決這些問題的最佳方法。

0

下面是一個例子

private void doOpenFile() { 
    int result = myFileChooser.showOpenDialog(this); 

    if (result == JFileChooser.APPROVE_OPTION) { 
     Path path = myFileChooser.getSelectedFile().toPath(); 

     try { 
      String contentString = ""; 

      for (String s : Files.readAllLines(path, StandardCharsets.UTF_8)) { 
       contentString += s; 
      } 

      jText.setText(contentString); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

private void doSaveFile() { 
    int result = myFileChooser.showSaveDialog(this); 

    if (result == JFileChooser.APPROVE_OPTION) { 
     // We'll be making a mytmp.txt file, write in there, then move it to 
     // the selected 
     // file. This takes care of clearing that file, should there be 
     // content in it. 
     File targetFile = myFileChooser.getSelectedFile(); 

     try { 
      if (!targetFile.exists()) { 
       targetFile.createNewFile(); 
      } 

      FileWriter fw = new FileWriter(targetFile); 

      fw.write(jText.getText()); 
      fw.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
}