0

好的,所以我制作了一个文本编辑器,到目前为止可以使用 jFileChooser 创建新文件和打开文件。

我想要做的是让文件的保存工作。每次您添加或打开一些文件时,它都会在选项卡窗格中添加一个新选项卡,名称将是文件 1 等或打开的文件的名称。

单击保存按钮时,将打开保存对话框

  int returnVal = fileChooser.showSaveDialog(this);

我希望将选项卡上的名称插入到文件字段的名称中。

另外,如何制作当前选定选项卡文本区域的文件?我已经尝试过了,但是不行:

  int index = tabbedPane.getSelectedIndex();
  Component c = tabbedPane.getComponentAt(index);

  JTextArea a = (JTextArea) c;
  System.out.println(a.getText());

 File file = new File(a.getText());
 fileChooser.setSelectedFile(file);

所以我需要在我猜的 textArea 中创建一个字符串文件。

4

3 回答 3

3

跟进@Andrew 的回答,这里有一个片段说明了他的意思。我冒昧地使用 a 而OutputStreamWriter不是 aFileWriter因为这允许您选择用于编写文件的字符集,这是您通常想要控制而不依赖于“随机”默认平台字符集的东西。

import java.awt.BorderLayout;
import java.awt.Desktop;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class TestTextArea {

    private JTextArea textArea;
    private JButton save;

    protected void initUI() {
        JFrame frame = new JFrame(TestTextArea.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        textArea = new JTextArea(24, 80);
        save = new JButton("Save to file");
        save.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                saveToFile();
            }
        });
        frame.add(new JScrollPane(textArea));
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(save);
        frame.add(buttonPanel, BorderLayout.SOUTH);
        frame.setSize(500, 400);
        frame.setVisible(true);
    }

    protected void saveToFile() {
        JFileChooser fileChooser = new JFileChooser();
        int retval = fileChooser.showSaveDialog(save);
        if (retval == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();
            if (file != null) {
                if (!file.getName().toLowerCase().endsWith(".txt")) {
                    file = new File(file.getParentFile(), file.getName() + ".txt");
                }
                try {
                    textArea.write(new OutputStreamWriter(new FileOutputStream(file), "utf-8"));
                    Desktop.getDesktop().open(file);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestTextArea().initUI();
            }
        });
    }
}
于 2013-08-24T21:53:46.110 回答
2

一个简单的方法是使用JTextComponent.write(Writer). JTextArea延伸JTextComponent

对于Writer使用FileWriter.

于 2013-08-24T21:01:59.973 回答
1

您需要将File打开的选项卡与选项卡相关联。这样,您可以根据所选选项卡查找关联的文件。

像这样HashMap<Component, File>的东西

于 2013-08-24T21:05:51.120 回答