【问题标题】:Button not creating new file when pressed in Java Swing application在 Java Swing 应用程序中按下时按钮不创建新文件
【发布时间】:2011-12-03 03:09:04
【问题描述】:

所以这只是一个带有按钮的窗口,当按下该按钮时,会打开一个新的内部窗口,其中包含三个文本框和一个确定按钮。当按下内部窗口中的确定按钮时,它应该创建一个新文件,但不是,有人知道为什么吗?

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

【问题讨论】:

  • 我试图运行这个例子: 问:你能告诉我们你的“main()”吗?
  • 这是您第一次应该尝试从命令行程序创建File 的问题之一。这样做会确认问题与 Swing无关

标签: java file swing file-io


【解决方案1】:

我敢打赌它确实会创建该文件,但您可能在错误的位置寻找它。你知道它在哪里写文件吗?

把这行代码放到你的程序中找出来:

System.out.println(System.getProperty("user.dir"));

【讨论】:

  • 哇,你说得对,我找错地方了。谢谢。这是一个很酷的小方法
  • 跟进,如果我希望文件名是 nameOfSong.getText() 中的文本,我将如何将其传递给 FileWriter?因为如果我将它作为 FileWriter dir = new FileWriter("nameOfSong.getText().txt") 传递,它不会从那时起?抱歉,如果这是新手问题,那是因为我是新手..
  • 1) "nameOfSong.getText().txt" 应该是nameOfSong.getText()+".txt" 2) 如果有机会,请将此答案标记为正确。
  • 不要将nameOfSong.getText() 放在引号中。此方法返回一个字符串,因此您不需要在方法调用周围加上引号。如果您愿意,可以使用+ ".txt" 将“.txt”附加到它
  • meta.stackexchange.com/a/65088/155831 也可以单击任何答案或问题左侧的向上三角形来表示“好答案”或“好问题”。对于我们提出的问题,我们只能给出一个“正确”,但“赞成票”可以应用于任何地方。
【解决方案2】:

但不是,有人知道为什么吗?

它可能会在当前工作目录中创建它 - 可能不是您想要的。 检查那里(如果使用 IDE,请参阅目录的启动属性),或尝试使用绝对路径首先 "c:\\tmp\\myfile.txt"、"/home/myhome/myfile.txt"..

从评论中跟进 Q:

我希望文件名是 nameOfSong.getText()... new FileWriter("nameOfSong.getText().txt") 中的文本,它不会生成

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

根据另一条评论。

【讨论】:

  • 是的,我找错地方了,现在我可以问一个后续问题吗?如果我希望文件名是 nameOfSong.getText() 中的文本,我将如何将其传递给 FileWriter?因为如果我将它作为 FileWriter dir = new FileWriter("nameOfSong.getText().txt") 传递,它不会从那时起?抱歉,如果这是新手问题,那是因为我是新手..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-24
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多