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の回答に続いて、彼が何を意味したかを示すスニペットを次に示します。OutputStreamWriterこれにより、ファイルのFileWriter書き込みに使用される文字セットを選択できるようになります。これは、通常は制御したいものであり、「ランダムな」デフォルトのプラットフォーム文字セットに依存したくないものです。

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 に答える