Кнопка не создает новый файл при нажатии в приложении Java Swing - PullRequest
1 голос
/ 03 декабря 2011

Так что это просто окно с кнопкой, при нажатии на которую открывается новое внутреннее окно с тремя текстовыми полями и кнопкой ОК. когда кнопка ok во внутреннем окне нажата, он должен создать новый файл, но это не так, кто-нибудь знает почему?

import javax.swing.*;
import java.io.*;
import java.util.*;
import java.awt.BorderLayout;
import java.awt.event.*;

public class tuna extends JFrame {

    private JButton button1, ok;
    private JTextField nameOfSong, artist;
    private JTextArea lyrics;
    JDesktopPane desktop;
    JInternalFrame internalFrame;

    Formatter x;

    public tuna() {
        super("iLyrics");

        desktop = new JDesktopPane();
        getContentPane().add(desktop, BorderLayout.CENTER);

        button1 = new JButton("Add a Song");
        getContentPane().add(button1, BorderLayout.NORTH);

        thehandler handler = new thehandler();
        button1.addActionListener(handler);

    }

    private class thehandler implements ActionListener{
        public void actionPerformed(ActionEvent event){
            if(event.getSource()==button1)
                internalGui();
        }
    }

    public void internalGui(){
        // Add a Song

        JInternalFrame internalFrame = new JInternalFrame(
                "Internal Frame", true, true, true, true);
        internalFrame.setBounds(200, 200, 200, 200);
        desktop.add(internalFrame, JLayeredPane.DEFAULT_LAYER);
        // desktop.add(internalFrame);
        final JTextField nameOfSong = new JTextField("song");
        final JTextField artist = new JTextField("artist");
        final JTextArea lyrics = new JTextArea("lyrics");
        JButton ok = new JButton("Ok");
        internalFrame.add(nameOfSong, BorderLayout.BEFORE_FIRST_LINE);
        internalFrame.add(artist, BorderLayout.AFTER_LINE_ENDS);
        internalFrame.add(lyrics, BorderLayout.CENTER);
        internalFrame.add(ok, BorderLayout.SOUTH);
        ok.addActionListener(
                new ActionListener(){
                    public void actionPerformed(ActionEvent e){
                        try {
                            FileWriter dir = new FileWriter("test.txt");
                            BufferedWriter buffer = new BufferedWriter(dir);
                            buffer.write(nameOfSong.getText());
                            buffer.newLine();
                            buffer.write(artist.getText());
                            buffer.newLine();
                            buffer.write(lyrics.getText());
                            buffer.close();
                        } catch (Exception z) {
                            // TODO Auto-generated catch block
                            System.err.println("Error: " + z.getMessage());
                        }

                    }
                });
        internalFrame.setVisible(true);
    }
}

Ответы [ 2 ]

3 голосов
/ 03 декабря 2011

Держу пари, что он создает файл, но вы, возможно, ищете его не в том месте. Вы знаете, где он пишет файл?

Поместите эту строку кода в вашу программу, чтобы узнать:

System.out.println(System.getProperty("user.dir"));
3 голосов
/ 03 декабря 2011

но это не так, кто-нибудь знает почему?

Вероятно, он создает его в текущем рабочем каталоге - может быть не то, что вам нужно. Проверьте там (если используете IDE, см. Свойства запуска каталога) или попробуйте сначала указать абсолютный путь "c: \\ tmp \\ myfile.txt", "/home/myhome/myfile.txt"..

Follow Q из комментария:

я хочу, чтобы имя файла было текстом из nameOfSong.getText () ... new FileWriter ("nameOfSong.getText (). Txt"), оно не будет

new FileWriter(nameOfSong.getText() + ".txt" ) 

согласно другому комментарию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...