2013-03-29 10 views
11

Jestem początkującym użytkownikiem Javy. Robię prosty edytor tekstu w netbeans 7 (.3) IDE, używając jego edytora GUI. Głównym problemem, jaki napotykam, jest to, że nie mogę go zapisać/otworzyć pliku. Stworzyłem przycisk "zapisz". Kiedy upuszczam selektor plików, pojawia się on jako normalne otwarte okno dialogowe osadzone w oknie java bez żadnej funkcji. Próbowałem również tworzenie nowego jFileChooser po kliknięciu przycisku zapisu (w widoku Source), ale to nie działa.

Zapisz okno dialogowe pliku/pliku otwartego, używając edytora GUI Swing & Netbeans

W skrócie, potrzebuję prostego okna dialogowego otwierania/zapisywania. Po naciśnięciu przycisku "Zapisz" otwiera się okno zapisu i zapisuje plik tam, gdzie wybierze użytkownik z dowolną nazwą i rozszerzeniem .rtf lub .txt. (PS: czy można zapisać plik w .docx lub .doc w Javie?)
Po naciśnięciu przycisku "Otwórz" otwiera się plik w .rtf lub .txt (ponownie, czy można otworzyć. docx lub .doc w Javie?) za pomocą selektora plików.

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

Code jest tutaj: https://docs.google.com/file/d/0B766zz1iJ1LRN2lGRjNtM29vN2M/edit?usp=sharing

+0

po jakiś kod proszę – Aboutblank

+0

musimy zobaczyć jakiś kod –

+0

tak, że kod nie pomaga w ogóle, jak to pełny ze znacznikami html .. – Tom

Odpowiedz

19

ja stworzyliśmy przykładowy UI który pokazuje okno dialogowe zapisu i otwierania pliku. Kliknij przycisk Zapisz, aby otworzyć okno dialogowe zapisu i kliknij przycisk Otwórz, aby otworzyć okno dialogowe pliku.

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

Jak to działa ze stylem okna? –

+0

@AalaaZamknięty styl okna ??? – Amarnath

+1

Mam na myśli styl okna z dyktafonami w systemie operacyjnym Windows, ponieważ ten kod tworzy skrzynkę dialogową, taką jak ta na Macu. –

3

myślę można napotkać trzy problemy:

  1. zrozumieniem FileChooser
  2. zapisu/odczytu plików
  3. zrozumienie rozszerzeń i formatów plików

ad 1. Czy jesteś pewien, że podłączyłeś FileChooser do odpowiedniego panelu/kontenera? Poszukałbym prostego samouczka na ten temat i sprawdził, czy to działa. To najlepszy sposób na naukę - poprzez małe, ale wystarczająco duże kroki do przodu. Załatwienie sprawy na takie części może być czasem trudne;)

ad. 2. Po zapisaniu lub otwarciu pliku powinieneś mieć metody zapisu lub odczytu pliku. I znowu są całkiem ładne przykłady w tej sprawie i łatwo jest zrozumieć temat.

ad. 3. Istnieje różnica między plikiem o rozszerzeniu i formatem pliku. Możesz zmienić format dowolnego pliku na dowolny, ale nie ma to wpływu na jego zawartość. Może to spowodować, że plik stanie się nieczytelny dla aplikacji powiązanej z takim rozszerzeniem. Pliki TXT są łatwe - czytasz to, co piszesz. XLS, DOCX itd. Wymagają więcej pracy i zazwyczaj framework jest najlepszym sposobem na rozwiązanie tych problemów.

0

Oto przykład

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(); 
     } 
    } 
}