jFileChooser для сохранения файла выбранной вкладки
Итак, у меня есть текстовый редактор, который может создавать новые файлы и открывать файлы с помощью jFileChooser.
Я пытаюсь заставить файлы работать. Каждый раз, когда вы добавляете или открываете несколько файлов, в панель вкладок добавляется новая вкладка, и именем будет либо файл 1 и т. Д., Либо имя открытого файла.
При нажатии кнопки сохранения открывается диалоговое окно сохранения.
int returnVal = fileChooser.showSaveDialog(this);
Я хочу, чтобы имя на вкладке было вставлено в поле имени файла.
Также как мне сделать файл текущей выбранной вкладки textarea? Я пробовал это, но это не идти:
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);
Поэтому мне нужно сделать файл строки в тексте.
3 ответа
В ответ на ответ Эндрю, вот фрагмент, иллюстрирующий, что он имел в виду. Я позволил себе использовать скорее 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();
}
});
}
}
Простой способ - использовать JTextComponent.write(Writer)
, JTextArea
продолжается JTextComponent
,
Для Writer
использовать FileWriter
,
Вам нужно, кое-как связать File
который был открыт с вкладкой. Таким образом, вы можете найти файл, связанный с выбранной вкладкой.
Что-то вроде HashMap<Component, File>
например