Abspeichern von .txt Dateien in GUI Applikation



  • Hi,

    weiß jemand wie ich aus einer GUI Applikation (hier: Texteditor) Dateien abspeichern kann?
    Habe das Programm schon geschrieben: JFrame mit JMenuBar, JMenu und den JMenuItems "Beenden" und "Speichern". Jeder JMenuItem hat einen ActionListener in einer annonymen Klasse zugewiesen bekommen. In einer ContentPane ist eine JScrollPane und in dieser eine JTextArea. Wenn ich auch Beenden klicke schließt das Programm, wenn ich auf Speichern klicke soll ein Dialog, wie unter MS Word erscheinen, wo ich der Datei einen Namen geben und sie an beliebiger Stelle abspeichern kann. Leider weiß ich nicht wie das funktioniert und finde in der API auch nichts entsprechendens. Habe das Speichern und Laden mal mit GoToJava 2 mit der file-Klasse aus java.io in Konsolenprogrammen gelernt. Bei GUI Anwendungen wird es sicher was vordefiniertes geben, wahrscheinlich mit Mitwirken der file-Klasse. Wenn es was vorgefertigtes ohne die file-Klasse gibt, würde ich trotzdem gerne wissen wie man sowas komplett selbst schreiben kann mit der file-Klasse (zum üben).
    Danke für eure Hilfe

    Mein Beispiel:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    class MainMenu
    extends JMenuBar
    {
       private JMenu menu;
       private JMenuItem item;
    
       public MainMenu(JFrame frame) {
    
           final JFrame mf = frame;    
    
           menu = new JMenu("Datei");
           item = new JMenuItem("Laden");
           menu.add(item);
           item = new JMenuItem("Speichern");
           menu.add(item);
           item = new JMenuItem("Beenden");
           menu.add(item);
           this.add(menu);
       }
    }
    
    public class MainFrame
    extends JFrame
    {
       private JTextArea area;
    
       public MainFrame() {
          super("Dateihandling");
          setLocation(100,100);
          setSize(300,200);
          setJMenuBar(new MainMenu(this));
          Container cp = getContentPane();
          area = new JTextArea();
          cp.add(new JScollPane(area));
          setVisible(true);
       }
    
       public static void main(String[] args) {
          MainFrame wnd = new MainFrame();
       }
    }
    

    Der ActionListener zu jedem JMenuItem würde so aussehen, wo dann auch das Speichern und Laden passieren soll...

    [java]
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    String cmd = e.getActionCommand();
    if(cmd.equals("Laden")) {
    //Laden
    }else if(cmd.equals("Speichern")) {
    //Speichern
    }else if(cmd.equals("Beenden")) {
    mf.setVisible(false);
    mf.dispose();
    System.exit();
    }
    }
    });



  • Schau mal in der Hilfe unter JFileChooser (glaube ich) nach, da kannst Du Dir einen vorgefertigten Dialog zusammenbasteln. Sun liefert auch ein paar Tutorials darüber.

    Die File-Klasse mußt du so oder so verwenden, da der Benutzer mit dem JFilechooser nur eine Pfadangabe aussucht. Was mit dieser Pfadangabe nun passieren soll, dass mußt Du dann wieder in deinem Programm programmieren.

    Wie Du das mit dem File machst, steht eigentlich auch gut in der Hilfe geschrieben.



  • Hab hier mal ein wenig Code gefunden:

    Zum JFileChooser:

    String path = "";
        JFileChooser x=new JFileChooser();
        x.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    
        if(x.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
          path = x.getSelectedFile().getPath();
    

    Zum File:

    File x=new File("index.html");
            try{
              BufferedWriter writer = new BufferedWriter(new FileWriter(x));
              writer.write("<html>\n<body>\n<h1>Hello World!</h1>\n</body>\n</html>\n");
              writer.close(); //schließt den Stream
            }
            catch(IOException e){
              e.printStackTrace();
            }
    

    Kannst ja mal schaun, ob Du damit was anfangen kannst. 🙂


Log in to reply