Speichern von Text macht Probleme

Hallo erstmal,

Ich habe ein Problem wenn ich den Inhalt meiner JTextArea als * speichern möchte.
Ich möchte das ich verschiedene Formate auswählen kann (vielleicht auch ein eigenes).
Hier der Code.

import java.awt.*;
import java.awt.event.*;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Document extends JFrame implements ActionListener
{
/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
    private JTextArea ta;
    private int count;
    private JMenuBar menuBar;
    private JMenu fileM,editM,viewM;
    private JScrollPane scpane;
    private JMenuItem exitI,cutI,copyI,pasteI,selectI,saveI,loadI,statusI;
    private String pad;
    private JToolBar toolBar;
    public Document()
    {
        super("Document");
        setSize(600, 600);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	Container pane = getContentPane();
	    pane.setLayout(new BorderLayout());

	    count = 0;
	    pad = " ";
	    ta = new JTextArea(); //textarea
	    menuBar = new JMenuBar(); //menubar
	    fileM = new JMenu("File"); //file menu
	    editM = new JMenu("Edit"); //edit menu
	    viewM = new JMenu("View"); //edit menu
	    scpane = new JScrollPane(ta); //scrollpane  and add textarea to scrollpane
	    exitI = new JMenuItem("Exit");
	    cutI = new JMenuItem("Cut");
	    copyI = new JMenuItem("Copy");
	    pasteI = new JMenuItem("Paste");
	    selectI = new JMenuItem("Select All"); //menuitems
	    saveI = new JMenuItem("Save"); //menuitems
	    loadI = new JMenuItem("Load"); //menuitems
	    statusI = new JMenuItem("Status"); //menuitems
	    toolBar = new JToolBar();

	    ta.setLineWrap(true);
	    ta.setWrapStyleWord(true);

	    setJMenuBar(menuBar);
	    menuBar.add(fileM);
	    menuBar.add(editM);
	    menuBar.add(viewM);

	    fileM.add(saveI);
	    fileM.add(loadI);
	    fileM.add(exitI);

	    editM.add(cutI);
	    editM.add(copyI);
	    editM.add(pasteI);        
	    editM.add(selectI);

	    viewM.add(statusI);

	    saveI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
	    loadI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, ActionEvent.CTRL_MASK));
	    cutI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK));
	    copyI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
	    pasteI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK));
	    selectI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK));

	    pane.add(scpane,BorderLayout.CENTER);
	    pane.add(toolBar,BorderLayout.SOUTH);

	    saveI.addActionListener(this);
	    loadI.addActionListener(this);
	    exitI.addActionListener(this);
	    cutI.addActionListener(this);
	    copyI.addActionListener(this);
	    pasteI.addActionListener(this);
	    selectI.addActionListener(this);
	    statusI.addActionListener(this);
      
	    setVisible(true);
}
public void actionPerformed(ActionEvent e) 
{
    JMenuItem choice = (JMenuItem) e.getSource();
    if (choice == saveI)
    {
    	
    	/*
         *Hier was kommt
         *
         */
    	
        public void speichern()
        {
            JFileChooser chooser = new JFileChooser();
            chooser.showSaveDialog(null);
           
         try
         {
          String Name = ta.getText();
 
          File file = new File("D:\\"+Name+".txt");
          FileWriter fw = new FileWriter(file);
 
          fw.write("Name: "+Name+"
");
 
          fw.flush();
          fw.close();
 
          }
           catch( IOException ev )
           {
           ev.printStackTrace();
           }
       }

        /*
         *Bis hier
         *
         */
    	
    	
    	
    }
    else if (choice == exitI)
    {   
    	System.exit(0);
    }    	
    else if (choice == cutI)
    {
        pad = ta.getSelectedText();
        ta.replaceRange("", ta.getSelectionStart(), ta.getSelectionEnd());
    }
    else if (choice == copyI)
    {
        pad = ta.getSelectedText();
    }
    else if (choice == pasteI)
    {
        ta.insert(pad, ta.getCaretPosition());
    }
    else if (choice == selectI)
    {
        ta.selectAll();
    }
    else if (e.getSource() == statusI)
    {
        //not yet implmented
    }
}
public static void main(String[] args) 
{
    new Document();
}
}

Mit freundlichem Gruß,
MrSmile07

Was meinst du mit “als * speichern”? Generell kommst du mit String myText = textArea.getText(); an den Text. Diesen kannst du natürlich auch in eine Datei schreiben. Irgendwie ist die Frage etwas unkonkret und das Programm zu lang für ein KKSB.

Ich möchte das ich verschiedene Formate auswählen kann (vielleicht auch ein eigenes). (Also noch nicht bekannt ob als .txt …)

Ich möchte es ja in eine Datei schreiben (Wie man es vielleicht im COde schon sieht).

Was bedeutet KKSB?

Mit freundlichem Gruß,
MrSmile07

KKSB steht für “kleines, kompilierbares, selbstständiges Beispiel”. Bei dir stolpere ich über irgendwelche Tastenbelegungen, die zur Frage des Abspeicherns keine Rolle spielen.

Geht es um die Frage, wie du im Speicherdialog verschiedene Formate durch den Benutzer auswählen lassen kannst?

Du kannst dir einen FileFilter erzeugen:

        FileFilter fileFilter = new FileFilter() {
            @Override
            public boolean accept(File file) {
                return file.toString().endsWith(".bla");
            }

            @Override
            public String getDescription() {
                return "Dateien im Bla-Format";
            }
        };

und diesem dem Speichern-Dialog mitgeben:

        JFileChooser fileChooser = new JFileChooser(startDirectory);
        fileChooser.setAcceptAllFileFilterUsed(false);
        fileChooser.setFileFilter(fileFilter);
        fileChooser.addChoosableFileFilter(fileFilter);
        int state = fileChooser.showSaveDialog(parent);
        if (state == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();
            return file;
        }
        else {
            return null;
        }

startDirectory ist dabei das Verzeichnis, das beim Öffnen des Dialogs geöffnet wird. parent ist die Komponente, vor der der Dialog angezeigt wird.

Ich weiß nicht, ob das hilft, könnte total an deiner Frage vorbei sein, aber ich werde eben nicht ganz schlau aus ihr.

Kannst du in Skype mich mal anrufen ??

Mit freundlichem Gruß,
MrSmile07

Ich denke mal es geht ihm um den Export in verschiedene Dateiformate, beispielsweise .txt .rtf .doc .pdf usw.

Am einfachsten dürfte .txt sein, das ist unkomprimiert.
Dazu einfach den Text in eine Datei speichern (z.b. mit einem PrintWriter) und die Datei .txt nennen (Filterbeispiel siehe oben)

Für andere Formate sucht man sicht am besten einen Exporter, für pdf z.B. eine lib wie http://itextpdf.com/

Gruß

Nicht ganz @Firephoenix ich möchte es auch nachher in meinem Texteditor weiter bearbeiten können und bei mir gehts um den Code.

Übrigens ich bin in Skype online egal was gerade das Plugin behauptet.

Mit freundlichem Gruß,
MrSmile07

*** Edit ***

Momentan sind da viele fehler, wenn ich es einfach einfüge.

Mit freundlichem Gruß,
MrSmile07

Wenn Du mit der Maus darüber fährst werden die Fehler ja genannt.
Formatiere mal die Einrückung anständig. Aktuell sieht es danach aus, dass Du u.a. eine Klammer zu viel/wenig hast.

Bitte aber da fehlt keine Klammer hier der Code:

    FileFilter fileFilter = new FileFilter() 
    	     {
    		    @Override
    		    public boolean accept(File file) 
    		    {
    		     return file.toString().endsWith(".bla");
    		    }
    		  
    		    @Override
    		    public String getDescription() 
    		    {
    		    return "Dateien im Bla-Format";
    		    }
    		 };
    		    JFileChooser fileChooser = new JFileChooser(startDirectory);
    		    fileChooser.setAcceptAllFileFilterUsed(false);
    		    fileChooser.setFileFilter(fileFilter);
    		    fileChooser.addChoosableFileFilter(fileFilter);
    		    int state = fileChooser.showSaveDialog(parent);
    		    if (state == JFileChooser.APPROVE_OPTION) 
    		    {
    		      File file = fileChooser.getSelectedFile();
    		      return file;
    		    }
    		    else 
    		    {
    		      return null;
    		    }
    	

Mit freundlichem Gruß,
MrSmile07

Das untere stammte aus einer Methode, die ein File zurückgibt (oder null beim Abbruch durch den Benutzer). Wenn du das einfach so untereinander klatschst, wird das natürlich nichts. schmunzelt

Das war jetzt eher als Hinweis an Dich gedacht.
Wenn das tatsächlich nich in einer Methode ist die ein File Objekt zurückgibt macht das keinen Sinn. Außerdem solltest Du darauf achten, dass Du javax.swing.filechooser.FileFilter erweiterst/importierst, das unterstrichene getDescription lässt vermuten, dass Du fälschlicherweise java.io.FileFilter importierst.
Variablen die Du verwenden willst müssen natürlich 1. deklariert und 2. initialisiert sein. (startDirectory schein so ein Fall zu sein)

Aber wie gesagt, die meisten Hinweise solltest Du bereits erhalten wenn Du Dir die Fehlermeldungen der IDE mal anschaust.

Wie so oft der Tipp, einfach anfangen. Also:
Bau das ganze erstmal so, dass du es als txt speichern und bearbeiten kannst, sobald das funktioniert kannst du es erweitern.

Ok habe es behoben soweit. Jetzt hat er beim laden ein Problem ausserdem möchte ich beim Speichern ein Fenster mit einer Ordnerstruktur.

Mit freundlichem Gruß,
MrSmile07

*** Edit ***

Ganz ruhig erstmal die idee kommt nicht von mir:

[QUOTE=Crian]KKSB steht für “kleines, kompilierbares, selbstständiges Beispiel”. Bei dir stolpere ich über irgendwelche Tastenbelegungen, die zur Frage des Abspeicherns keine Rolle spielen.

Geht es um die Frage, wie du im Speicherdialog verschiedene Formate durch den Benutzer auswählen lassen kannst?

Du kannst dir einen FileFilter erzeugen:

        FileFilter fileFilter = new FileFilter() {
            @Override
            public boolean accept(File file) {
                return file.toString().endsWith(".bla");
            }

            @Override
            public String getDescription() {
                return "Dateien im Bla-Format";
            }
        };

und diesem dem Speichern-Dialog mitgeben:

        JFileChooser fileChooser = new JFileChooser(startDirectory);
        fileChooser.setAcceptAllFileFilterUsed(false);
        fileChooser.setFileFilter(fileFilter);
        fileChooser.addChoosableFileFilter(fileFilter);
        int state = fileChooser.showSaveDialog(parent);
        if (state == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();
            return file;
        }
        else {
            return null;
        }

startDirectory ist dabei das Verzeichnis, das beim Öffnen des Dialogs geöffnet wird. parent ist die Komponente, vor der der Dialog angezeigt wird.

Ich weiß nicht, ob das hilft, könnte total an deiner Frage vorbei sein, aber ich werde eben nicht ganz schlau aus ihr.[/QUOTE]

Ich habe sie bloß übernommen.

Mit freundlichem Gruß,
MrSmile07

Fehler gefunden: Muss „bloß kopiert“ heißen. :wink:

Sorry, konnte ich mir nicht verkneifen, aber jetzt sind ja alle Fehler behoben.

Das weiß ich nicht teste ichmorgen.

Mit freundlichem Gruß,
MrSmile07

Hallo habe rum probiert hier der Code der rum spackt:

FileFilter fileFilter = new FileFilter() 
    	     {
				public boolean accept1(File arg0) {
					return ta.toString().endsWith(".bla");
				}

				@Override
				public String getDescription() {
					return ta.toString().endsWith(".bla");
				}

				@Override
				public boolean accept(File f) {
					// TODO Auto-generated method stub
					return false;
				}
    	     };

Wäre nett wenn mir jemand helfen könnte. ta =TextArea.

Mit freundlichem Gruß,
MrSmile07

Helfen könnte man, wenn man das Problem kennt.
Wozu die Methode accept1 und warum hängt der Dateifilter voneiner TextArea ab?

Ich glaub keiner hat momentan eine funktionierende Glaskugel… die sind echt rar im moment…

Ernsthaft… “der Code der rum spackt” woher sollen wir wissen was du damit meinst? Was funktioniert nicht, was erwartest du, was soll er machen?
Hast du mal System.out.println’s eingebaut um zu sehen was überhaupt drin steht oder ob er in die Methoden kommt?

Vielleicht nimmst du dir meinen letzten Kommentar mal zu Herzen:

[QUOTE=MiMi]Wie so oft der Tipp, einfach anfangen. Also:
Bau das ganze erstmal so, dass du es als txt speichern und bearbeiten kannst, sobald das funktioniert kannst du es erweitern.[/QUOTE]

Genau das möchte ich ja machen :-(, dannach kann ich mich immer noch um entscheiden.

import java.awt.*;
import java.awt.event.*;
import java.io.File;

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileFilter;


public class Document extends JFrame implements ActionListener
{
/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
    private JTextArea ta;
    private int count;
    private JMenuBar menuBar;
    private JMenu fileM,editM,viewM;
    private JScrollPane scpane;
    private JMenuItem exitI,cutI,copyI,pasteI,selectI,saveI,loadI,statusI;
    private String pad;
    private JToolBar toolBar;
    public Document()
    {
        super("Document");
        setSize(600, 600);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	Container pane = getContentPane();
	    pane.setLayout(new BorderLayout());

	    count = 0;
	    pad = " ";
	    ta = new JTextArea(); //textarea
	    menuBar = new JMenuBar(); //menubar
	    fileM = new JMenu("File"); //file menu
	    editM = new JMenu("Edit"); //edit menu
	    viewM = new JMenu("View"); //edit menu
	    scpane = new JScrollPane(ta); //scrollpane  and add textarea to scrollpane
	    exitI = new JMenuItem("Exit");
	    cutI = new JMenuItem("Cut");
	    copyI = new JMenuItem("Copy");
	    pasteI = new JMenuItem("Paste");
	    selectI = new JMenuItem("Select All"); //menuitems
	    saveI = new JMenuItem("Save"); //menuitems
	    loadI = new JMenuItem("Load"); //menuitems
	    statusI = new JMenuItem("Status"); //menuitems
	    toolBar = new JToolBar();

	    ta.setLineWrap(true);
	    ta.setWrapStyleWord(true);

	    setJMenuBar(menuBar);
	    menuBar.add(fileM);
	    menuBar.add(editM);
	    menuBar.add(viewM);

	    fileM.add(saveI);
	    fileM.add(loadI);
	    fileM.add(exitI);

	    editM.add(cutI);
	    editM.add(copyI);
	    editM.add(pasteI);        
	    editM.add(selectI);

	    viewM.add(statusI);

	    saveI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
	    loadI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, ActionEvent.CTRL_MASK));
	    cutI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK));
	    copyI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
	    pasteI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK));
	    selectI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK));

	    pane.add(scpane,BorderLayout.CENTER);
	    pane.add(toolBar,BorderLayout.SOUTH);

	    saveI.addActionListener(this);
	    loadI.addActionListener(this);
	    exitI.addActionListener(this);
	    cutI.addActionListener(this);
	    copyI.addActionListener(this);
	    pasteI.addActionListener(this);
	    selectI.addActionListener(this);
	    statusI.addActionListener(this);
      
	    setVisible(true);
}
public void actionPerformed(ActionEvent e) 
{
    JMenuItem choice = (JMenuItem) e.getSource();
    if (choice == saveI)
    {
    	 
    	
    	     FileFilter fileFilter = new FileFilter() 
    	     {
				public boolean accept1(File arg0) {
					return ta.toString().endsWith(".bla");
				}

				@Override
				public String getDescription() {
					return ta.toString().endsWith(".bla");
				}

				@Override
				public boolean accept(File f) {
					// TODO Auto-generated method stub
					return false;
				}
    	     };
    	
 	
    	
    }
    else if (choice == exitI)
    {   
    	System.exit(0);
    }    	
    else if (choice == cutI)
    {
        pad = ta.getSelectedText();
        ta.replaceRange("", ta.getSelectionStart(), ta.getSelectionEnd());
    }
    else if (choice == copyI)
    {
        pad = ta.getSelectedText();
    }
    else if (choice == pasteI)
    {
        ta.insert(pad, ta.getCaretPosition());
    }
    else if (choice == selectI)
    {
        ta.selectAll();
    }
    else if (choice == loadI)
    {
    	
    	@Override
	    public ta getDescription() 
	    {
	    return "Dateien im Bla-Format";
	    }
	    JFileChooser fileChooser = new JFileChooser(startDirectory);
	    fileChooser.setAcceptAllFileFilterUsed(false);
	    fileChooser.setFileFilter(fileFilter);
	    fileChooser.addChoosableFileFilter(fileFilter);
	    int state = fileChooser.showSaveDialog(parent);
	    if (state == JFileChooser.APPROVE_OPTION) 
	    {
	      File file = fileChooser.getSelectedFile();
	      return file;
	    }
	    else 
	    {
	      return null;
	    }
	    
    }
    else if (e.getSource() == statusI)
    {
        //not yet implmented
    }
}
public static void main(String[] args) 
{
    new Document();
}
}

Kopiert mal den Code dann seht ihr was ich meine. (kann es nicht erklären :-()

EDIT
Nur die Textarea soll gespeichert werden.
/EDIT

Mit freundlichem Gruß,
MrSmile07

Der FileFilter an der Stelle macht keinen Sinn. Meine vorheigen Anmerkungen gelten weiterhin. Der restliche Code ist auch einfach nur planlos/ahnungslos zusammenkopiert.
Mit einem FileFilter kann man definieren, welche Dateien der JFileChooser anzeigt - wenn der entsprechende Filter ausgewählt ist.

Ein FileFilter speichert nichts. Auch ein JFileChooser kann nichts speichern oder laden das musst Du selbst übernehmen.

Fang doch einfach mal damit an Text aus einer fest vorgegebenen Datei zu lesen und in der JTextArea anzuzeigen. Anschließend speicherst Du den Text wieder in die Datei.