【问题标题】:Save file/open file dialog box, using Swing & Netbeans GUI editor保存文件/打开文件对话框,使用 Swing & Netbeans GUI 编辑器
【发布时间】:2013-03-29 12:26:16
【问题描述】:

我是 Java 的初学者。我正在使用它的 GUI 编辑器在 netbeans 7(.3) IDE 中制作一个简单的文本编辑器。我面临的主要问题是我无法保存/打开文件。我创建了“保存”按钮。当我放下文件选择器时,它是一个嵌入在 java 窗口中的普通打开文件对话框,根本没有任何功能。我还尝试在单击保存按钮时(在源视图中)创建一个新的 jFileChooser,但它不起作用。

简而言之,我需要一个简单的打开/保存对话框。当按下“保存”按钮时,保存对话框打开并保存用户选择的任何名称和 .rtf 或 .txt 扩展名的文件。 (P.S.:是否可以在 Java 中将文件保存为 .docx 或 .doc?)
当按下“打开”按钮时,它会通过文件选择器打开一个 .rtf 或 .txt 格式的文件(同样,是否可以在 Java 中打开 .docx 或 .doc?)。

    private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           
    JFileChooser saveFile = new JFileChooser();
    if saveFile.showSaveDialog(modalToComponent) == JFileChooser.APPROVE_OPTION {
        File xyz = saveFile.getSelectedFile();
    }
}

代码在这里:https://docs.google.com/file/d/0B766zz1iJ1LRN2lGRjNtM29vN2M/edit?usp=sharing

【问题讨论】:

  • 请贴一些代码
  • 我们需要看一些代码
  • 是的,该代码根本没有帮助,因为它充满了 html 标记..
  • 请使用代码块(看起来像 {})在此处发布代码摘录。没有人需要/想要阅读您的所有代码(您的链接甚至不起作用)。 sscce.org
  • 要回答您的实际问题,您可以使用您想要的任何扩展名保存来自 java 的文件。您可以确保文件的内容与扩展名匹配。换句话说,如果您编写 note.doc 文件,该文件应包含 1997 Word 文档格式的 Word 文档。

标签: java swing netbeans user-interface


【解决方案1】:

我创建了一个显示保存和打开文件对话框的示例 UI。点击保存按钮打开保存对话框,点击打开按钮打开文件对话框。

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class FileChooserEx {
    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                new FileChooserEx().createUI();
            }
        };

        EventQueue.invokeLater(r);
    }

    private void createUI() {
        JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());

        JButton saveBtn = new JButton("Save");
        JButton openBtn = new JButton("Open");

        saveBtn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                JFileChooser saveFile = new JFileChooser();
                saveFile.showSaveDialog(null);
            }
        });

        openBtn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                JFileChooser openFile = new JFileChooser();
                openFile.showOpenDialog(null);
            }
        });

        frame.add(new JLabel("File Chooser"), BorderLayout.NORTH);
        frame.add(saveBtn, BorderLayout.CENTER);
        frame.add(openBtn, BorderLayout.SOUTH);
        frame.setTitle("File Chooser");
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

【讨论】:

  • 我的意思是windows操作系统上的digalog box风格,因为这段代码使一个digalog box像Mac上的一样。
  • @Amarnath,你用保存按钮保存了什么文件?如何告诉ActionListener 打开保存特定文件的对话框?我可以为JFileChooser 指定要打开的默认文件夹吗?提前感谢您的宝贵时间并祝贺您的​​回答
【解决方案2】:

我认为你面临三个问题:

  1. 了解 FileChooser
  2. 写入/读取文件
  3. 了解扩展名和文件格式

ad 1. 您确定已将 FileChooser 连接到正确的面板/容器吗?我会去找一个关于这个问题的简单教程,看看它是否有效。这是最好的学习方式——向前迈出小而大的步伐。有时将问题分解成这样的部分可能会很棘手;)

广告。 2. 保存或打开文件后,您应该有写入或读取文件的方法。在这个问题上也有非常简洁的例子,而且很容易理解。

广告。 3. 有扩展名的文件和文件格式是有区别的。您可以将任何文件的格式更改为您想要的任何格式,但这不会影响其内容。它可能只会使与此类扩展名关联的应用程序无法读取文件。 TXT 文件很容易——您可以阅读您所写的内容。 XLS、DOCX 等需要更多的工作,通常框架是解决这些问题的最佳方法。

【讨论】:

    【解决方案3】:

    以任何格式保存是非常有可能的。 检查以下 - http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html

    第二,你期望保存对话框工作的究竟是什么,它是这样工作的, 打开一个 doc 文件是很有可能的—— http://srikanthtechnologies.com/blog/openworddoc.html

    【讨论】:

      【解决方案4】:

      这是一个例子

      private void doOpenFile() {
          int result = myFileChooser.showOpenDialog(this);
      
          if (result == JFileChooser.APPROVE_OPTION) {
              Path path = myFileChooser.getSelectedFile().toPath();
      
              try {
                  String contentString = "";
      
                  for (String s : Files.readAllLines(path, StandardCharsets.UTF_8)) {
                      contentString += s;
                  }
      
                  jText.setText(contentString);
      
              } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
          }
      }
      
      private void doSaveFile() {
          int result = myFileChooser.showSaveDialog(this);
      
          if (result == JFileChooser.APPROVE_OPTION) {
              // We'll be making a mytmp.txt file, write in there, then move it to
              // the selected
              // file. This takes care of clearing that file, should there be
              // content in it.
              File targetFile = myFileChooser.getSelectedFile();
      
              try {
                  if (!targetFile.exists()) {
                      targetFile.createNewFile();
                  }
      
                  FileWriter fw = new FileWriter(targetFile);
      
                  fw.write(jText.getText());
                  fw.close();
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多