Блокнот на Java (Swing)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Я новичок, изучаю Java. В ходе изучения библиотеки Swing я решил написать простой блокнот. Все просто: один класс контролирует окно (NootepadWindow), а второй все операции с файлами(Nootepad). Третий просто использует (Main) их.

NootepadWindow.java

package main;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class NootepadWindow extends JFrame implements ActionListener
{
    Nootepad nootepad;
 
    JTextArea textArea;
    JMenuBar menuBar;
 
    JMenu mFile;
    JMenu mExit;
    JMenuItem miNew;
    JMenuItem miOpen;
    JMenuItem miSave;
 
    public NootepadWindow(String title, int width,int height)
    {
        nootepad = new Nootepad();
 
        setTitle(title);
        setSize(width,height);
        setLayout(new BorderLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        menuBar = new JMenuBar();
        textArea = new JTextArea();
        mFile = new JMenu("File");
        miNew = new JMenuItem("New");
        miOpen = new JMenuItem("Open");
        miSave = new JMenuItem("Save");
        mExit = new JMenu("Exit");
 
        miNew.addActionListener(this);
        miOpen.addActionListener(this);
        miSave.addActionListener(this);
 
        mFile.add(miNew);
        mFile.add(miSave);
        mFile.add(miOpen);
 
        menuBar.add(mFile);
        menuBar.add(mExit);
 
        setJMenuBar(menuBar);
        add(textArea, BorderLayout.CENTER);
        setVisible(true);
    }
 
    @Override
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource().equals(miNew))
            nootepad.newFile();
 
        if(e.getSource().equals(miOpen))
            textArea.setText(nootepad.openFile().toString());
 
        if(e.getSource().equals(miSave))
            nootepad.saveFile(textArea.getText().getBytes());
    }
}
Nootepad.java
package main;
 
import javax.swing.*;
import java.io.*;
 
public class Nootepad
{
    private File currentFile;
 
    File newFile() {
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.showSaveDialog(null);
 
        File file = new File(fileChooser.getSelectedFile().getPath());
 
        try {
            file.createNewFile();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
 
        return file;
    }
 
    void saveFile(byte[] data) {
        try {
            if(currentFile != null) {
                currentFile.delete();
                currentFile.createNewFile();
            }
            else
                currentFile = newFile();
 
            FileOutputStream stream = new FileOutputStream(currentFile);
            stream.write(data);
            stream.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    byte[] openFile() {
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.showOpenDialog(null);
        currentFile = fileChooser.getSelectedFile();
 
        long lenghtFile = currentFile.length();
        byte[] fileBytes = new byte[(int)lenghtFile];
 
        try {
            FileInputStream stream = new FileInputStream(currentFile);
            stream.read(fileBytes);
            stream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return fileBytes;
    }
 
    public File getCurrentFile() {
        return currentFile;
    }
}
Main.java
package main;
 
public class Main
{
    public static void main(String argc[])
    {
        NootepadWindow nootepad = new NootepadWindow("MyNootepad", 1024, 1024);
    }
}
Теперь ближе к проблеме: Не могу нормально реализовать функцию открытия файла (openFile()). Она должна возвращать байты файла, а потом я уже в textArea пишу их как символы. Видимо я где-то ошибся, потому что при открытии файла у меня вместо текста — неизвестные символы (ну или частично неизвестные, то есть половина может быть нормальной ). P.S. — Раньше изучал С++, возможно не знаю каких-то тонкостей Java . Также возможно что-то "намутил" с кодировками... Если есть ещё полезные замечания по коду — всегда рад услышать.

Решение задачи: «Блокнот на Java (Swing)»

textual
Листинг программы
textArea.setText(new String(nootepad.openFile(), StandardCharsets.UTF_8);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5