Подтвердить что ты не робот

Сохраните файл/открыть файл диалоговое окно, используя Swing & Netbeans GUI editor

Я начинаю с Java. Я делаю простой текстовый редактор в netbeans 7 (.3) IDE, используя его графический редактор. Основная проблема, с которой я сталкиваюсь, заключается в том, что я не могу заставить ее сохранять/открывать файл. Я создал кнопку "Сохранить". Когда я отбрасываю выбор файла, он появляется как обычное диалоговое окно открытого файла, встроенное в окно java, без каких-либо функций. Я также попытался создать новый jFileChooser, когда нажата кнопка сохранения (в представлении "Источник" ), но она не работает.

Вкратце, мне нужно простое диалоговое окно open/save. Когда нажимается кнопка "Сохранить", открывается диалоговое окно сохранения и сохраняет файл везде, где пользователь выбирает любое имя и расширение .rtf или .txt. (P.S.: можно ли сохранить файл в .docx или .doc в Java?)
Когда нажимается "Open" btn, он открывает файл в .rtf или .txt(опять же, можно открыть .docx или .doc в Java?) Через выбор файла.

    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

4b9b3361

Ответ 1

Я создал образец интерфейса, который показывает диалог сохранения и открытия файла. Нажмите кнопку "Сохранить", чтобы открыть диалоговое окно сохранения, и нажмите кнопку "Открыть", чтобы открыть диалоговое окно файла.

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

Ответ 2

Я думаю, вы сталкиваетесь с тремя проблемами:

  • понимание FileChooser
  • записи/чтения файлов
  • понимание расширений и форматов файлов

ad 1. Вы уверены, что подключили FileChooser к правильной панели/контейнеру? Я бы пошел на простой учебник по этому вопросу и посмотрел, работает ли он. Это лучший способ учиться - делая небольшие, но достаточно большие шаги вперед. Нарушение проблемы в таких частях иногда может быть сложным;)

объявления. 2. После сохранения или открытия файла у вас должны быть методы для записи или чтения файла. И снова есть довольно аккуратные примеры по этому вопросу, и это легко понять тему.

объявления. 3. Существует разница между файлом, имеющим расширение и формат файла. Вы можете изменить формат любого файла на все, что захотите, но это не повлияет на его содержимое. Он может просто сделать файл нечитаемым для приложения, связанного с таким расширением. Файлы TXT просты - вы читаете, что пишете. XLS, DOCX и т.д. Требуют больше работы, и обычно это лучший способ справиться с ними.

Ответ 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();
        }
    }
}