Блокнот на Java (Swing)
Формулировка задачи:
Здравствуйте. Я новичок, изучаю Java. В ходе изучения библиотеки Swing я решил написать простой блокнот.
Все просто: один класс контролирует окно (NootepadWindow), а второй все операции с файлами(Nootepad). Третий просто использует (Main) их.
Nootepad.java
Main.java
Теперь ближе к проблеме: Не могу нормально реализовать функцию открытия файла (openFile()). Она должна возвращать байты файла, а потом я уже в textArea пишу их как символы. Видимо я где-то ошибся, потому что при открытии файла у меня вместо текста — неизвестные символы (ну или частично неизвестные, то есть половина может быть нормальной ).
P.S. — Раньше изучал С++, возможно не знаю каких-то тонкостей Java . Также возможно что-то "намутил" с кодировками... Если есть ещё полезные замечания по коду — всегда рад услышать.
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());
- }
- }
Листинг программы
- 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;
- }
- }
Листинг программы
- package main;
- public class Main
- {
- public static void main(String argc[])
- {
- NootepadWindow nootepad = new NootepadWindow("MyNootepad", 1024, 1024);
- }
- }
Решение задачи: «Блокнот на Java (Swing)»
textual
Листинг программы
- textArea.setText(new String(nootepad.openFile(), StandardCharsets.UTF_8);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д