JFileChooser - Keine Funtkion

niki2011

Mitglied
Hallo !
Ich bin ganz frisch hier und hoffe, dass mein Thema auch in diese Unterkategorie gehört.
Leider habe ich zurzeit ein Problem, wo ich als JAVA-Anfänger nicht weiterkomme.
Ich habe ein Programm geschrieben, den CTI Creator.
Er soll eine Konfigurationsdatei (im Editor) , die auf .cti endet schreiben.
Ich habe nun wie folgt gehandelt:
In meiner Programmoberfläche habe ich einen JButton angelegt, dieser soll auf Knopfdruck
einen JFileChooser öffnen, mit dem ich die Eingabe von 3 JTextFields in einer. cti Datei
abspeichern kann !
Kommt ihr mit ?

Hier ein Auszug : (Der Button ist bereits angelegt worden)
Java:
    button1.setBounds(128, 336, 209, 57);
    button1.setText("CTI Erstellen !");
    button1.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent evt) {
    button1_ActionPerformed(evt);
    String a = textField1.getText();
    String b = textField11.getText();
    String c = textField111.getText();
    jfcsSaveFilename(a,b,c);

Das ganze sollte nun wie folgt funktionieren.
Der Action-Listener des Buttons soll die Strings an die Methode jfcsSaveFilename übergeben.
Dies habe ich mit den Parametern erreicht.


Ich weiß jedoch nicht, wie ich die Methode jfcsSaveFilename schreiben muss, damit sich
mein gewünschter Speichern-Dialog öffnet, und die 3 Strings abspeichert.
Da gibt es jedoch noch ein kleines Problem.
In der fertigen & abgespeicherten Datei sollten nicht nur die 3 Strings zu finden sein.
Ein gewisser Standartcode der in dieser CTI Datei immer vorhanden sein muss,
muss ebenso ohne Eingabe des Benutzers direkt eingegeben werden.
Geschweige denn der Zeilenumbruch...


Vieleicht versteht mich einer, sodass man die Strings schon einmal speichern kann ! 🙂

Gruß.
 
Zuletzt bearbeitet:
Dazu sind 2 Schritte notwendig.

Zu erst musst du den FileChooser selbst callen (in deinem GUI öffnet sich dann ein Fenster wo du wie gewohnt die Zieldatei wählen kannst).

Dadurch erhälst du ein File Object, bzw den Absoluten Pfad zur gewählten Datei und kannst mit diesem eine neue File anlegen.

Diese musst du dann deiner "Filewriterfunktion" übergeben.

Mom ich frickel dir mal fix n beispiel zusammen (editier den post gleich).


EDIT:

Der FileChooser:
Java:
public void actionPerformed(ActionEvent evt) {									
									JFileChooser jfc = new JFileChooser();
									jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
									jfc.setCurrentDirectory(new File(System.getProperty("user.dir")));
									
									int returnVal = jfc.showSaveDialog(null);
									if(returnVal == JFileChooser.APPROVE_OPTION) {										
										
//möglichkeit 1:
DEINFILEWRITER(jfc.getSelectedFile());

//möglichkeit 2:
DEINFILEWRITER(jfc.getSelectedFile().getAbsolutePath());
									}
								}

Bedenke, dies ist nur ein Beispiel, in der Praxis kanns du mit dem filechooser noch viel mehr machen.
Z.B. kannst du auch so genannte FileFilter definieren, so dass du z.b. nur .cgi Files angezeigt bekommst, etc.

"jfc.setCurrentDirectory(new File(System.getProperty("user.dir")));" setzt dabei den FileChooser auf das Verzeichnis, in dem dein Programm ausgeführt wird.
Kannst statt dessen aber auch "jeden anderen x-beliebigen Pfad angeben".


DEINFILEWIRTER:
Java:
FileWriter fw;
			try {
				fw = new FileWriter(file, false);
				BufferedWriter bw = new BufferedWriter(fw);
				bw.write("Bla");
	            bw.newLine();
				bw.write("Blubb");
	            bw.newLine();
	            bw.flush();
	            bw.close();
	            fw.close();
			}catch(IOException e) {		
				e.printStackTrace();
			}
 
Zuletzt bearbeitet:
Ein FileChooser schreibt nichts in eine Datei sondern wählt eine Datei oder Ordner aus.

Etwas in eine Datei "schreiben", musst du schon selber machen siehe FileWriter.
 
Code:
                    JFileChooser fileChooser = new JFileChooser(); 
                    fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 
                    fileChooser.showSaveDialog(JFrame.this); 
                    File fileSelected = fileChooser.getSelectedFile();

Probiers mal damit. Das einfach in deine Methode reinpacken und am ende mit dem fileSelected weiterarbeiten.
In etwa so:
Code:
BufferedWriter bw=new BufferedWriter(new FileWriter(fileSelected ));
bw.write(a);
bw.write(b);
bw.write(c);
bw.close;
 
Super, danke schonmal.
Werde probieren das heute noch umzusetzen.

Wie setze ich das denn um , dass ich nur .cti Files sehe ?
Danke schonmal 🙂
 
Google ist dein Freund ... Filtern wäre hier das Stichwort.

Code:
fileChooser.setFileFilter(new FileNameExtensionFilter("CTI File","cti"));

Das wäre wohl die saubere und von Java mitgelieferte Variante. Könntest es dir aber auch selbst machen.
 
Super, danke schonmal.
Werde probieren das heute noch umzusetzen.

Wie setze ich das denn um , dass ich nur .cti Files sehe ?
Danke schonmal 🙂


Hab ich doch oben geschrieben, nennt sich "FileFilter", gibt dazu ca 1 mio beispiele im www 😉.
Auch hier kannst dus wieder "simpel" halten, wie z.b. Titanpharao über mir gepostet hat, oder du kannst dir ne eigene FileFilter Class schreiben mit zusätzlicher Funktionalität, je nach dem was du benötigst.
 
Vielen Dank, erstmal !
Habe leider immer noch Errors, muss mal sehen woran das liegt. Ich habe jetzt mal probiert die Art und Weise von Ulathar auszuprobieren, bleibe jedoch dort stecken.
Ich habe den Code von Ulathar entsprechend veränert.
Den oberen (File Chooser - Aufruf ) habe ich kopiert und bei mir eingefügt.. sieht nun so aus:
Das ist der ACTION LISTENER vom Button 1 - wie oben beschrieben.


Java:
 public void actionPerformed(ActionEvent evt) {
        button1_ActionPerformed(evt);
        String a = textField1.getText();
        String b = textField11.getText();
        String c = textField111.getText();
        
        // Textfelder werden ausgelesen
        // unten wird der bereits oben angelegt SAVE-DIALOG verwendet (jfcs ist dieser)

        
        
        
        jfcs.setFileSelectionMode(JFileChooser.FILES_ONLY);
        jfcs.setCurrentDirectory(new File(System.getProperty("user.dir")));
        int returnVal = jfcs.showSaveDialog(null);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
        fw(jfcs.getSelectedFile().getAbsolutePath()); }
        


        }}

Das Programm lässt sich logischerweise zurZeit nicht starten, da er fw nicht findet.
Also den Verweis zum Writer.

(Siehe
Code:
 17
)

Wie muss ich nun fortfahren ?
Danke.

Sorry für die Anfängerfragen 🙁
Gruß.
 
Zuletzt bearbeitet:
hast du ausserhalb des action listeners irgendwo als lokale oder globale variable dein "jfcs" object definiert und initialisiert?

wenn nicht, kann das schonmal überhaupt nicht funktionieren.


falls ja musst du jetzt natürlich die von dir gecallte function "fw(bla)" implementieren wo du im prinzip nur den von mir oben geposteten code für den filewriter verwenden musst.

alternativ kannst du auch auf die methode komplett verzichten und den code zum schreiben der datei direkt nach dem jfcs aufruf in deinen action listener packen (find ich aber unschön).
 
hast du ausserhalb des action listeners irgendwo als lokale oder globale variable dein "jfcs" object definiert und initialisiert?
wenn nicht, kann das schonmal überhaupt nicht funktionieren.

Java:
  private Label label1 = new Label();
  private JTextField textField1 = new JTextField();
  private JTextField textField11 = new JTextField();
  private JLabel label2 = new JLabel();
  private JTextField textField111 = new JTextField();
  private JLabel label22 = new JLabel();
  private JLabel label21 = new JLabel();
  private JButton button1 = new JButton();
  private JMenuBar menuBar = new JMenuBar();
  private JMenu Datei = new JMenu ("Datei");
  private JMenuItem Über = new JMenuItem ("Über");
  private JMenuItem Schließen = new JMenuItem ("Schliessen");
  public  JFileChooser jfcs = new JFileChooser();

Hier siehst du eine Liste mit meinen Definitionen. Müsste stimmen, da sich der Compiler
nicht mit jfcs auseinandersetzt.
 
Zuletzt bearbeitet:
Ulathar !
Danke !
Ich habe es fast geschafft 🙂
Ich kann alles abspeichern, das Problem ist nur er speichert es nicht unter .cti ab.
Das mit dem Filter klappt leider nicht.
Er speichert es nur unter DATEI ab, die ich dann mit Öffnen mit.. öffnen soll !
Aber sonst, besten Dank !
 
du musst einer datei auch eine endung geben.
andernfalls setzt java den dateinamen nur auf den absoluten pfad.

beispiel:

du gibst den folgenden pfad an:

"c:\neuer ordner\bla"

dann wird in dem ordner "neuer ordner" auf Partition C eine datei mit dem namen "bla" erzeugt.
Wählst du aber als pfad "c:\neuer ordner\bla.blubb"
wird im neuen ordner die datei "bla.blubb" angelegt.

ganz einfach.

was du nun machen kannst ist folgendes:

überprüfe den Pfad den dein filechooser dir liefert, ob der benutzer eine dateiendung angegeben hat. falls nicht, füge diese hinzu.

das geht in etwa so:

Java:
String path = jfcs.getSelectedFile().getAbsolutePath();
if(!path.endsWith(".cti")) {
   path = path + ".cti";
}


PS: hab gerade keine zeit für korrekte groß- und kleinschreibung 😉
 

Zurück
Oben