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

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

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

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

NootepadWindow.java

Листинг программы
  1. package main;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. public class NootepadWindow extends JFrame implements ActionListener
  6. {
  7. Nootepad nootepad;
  8. JTextArea textArea;
  9. JMenuBar menuBar;
  10. JMenu mFile;
  11. JMenu mExit;
  12. JMenuItem miNew;
  13. JMenuItem miOpen;
  14. JMenuItem miSave;
  15. public NootepadWindow(String title, int width,int height)
  16. {
  17. nootepad = new Nootepad();
  18. setTitle(title);
  19. setSize(width,height);
  20. setLayout(new BorderLayout());
  21. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  22. menuBar = new JMenuBar();
  23. textArea = new JTextArea();
  24. mFile = new JMenu("File");
  25. miNew = new JMenuItem("New");
  26. miOpen = new JMenuItem("Open");
  27. miSave = new JMenuItem("Save");
  28. mExit = new JMenu("Exit");
  29. miNew.addActionListener(this);
  30. miOpen.addActionListener(this);
  31. miSave.addActionListener(this);
  32. mFile.add(miNew);
  33. mFile.add(miSave);
  34. mFile.add(miOpen);
  35. menuBar.add(mFile);
  36. menuBar.add(mExit);
  37. setJMenuBar(menuBar);
  38. add(textArea, BorderLayout.CENTER);
  39. setVisible(true);
  40. }
  41. @Override
  42. public void actionPerformed(ActionEvent e)
  43. {
  44. if(e.getSource().equals(miNew))
  45. nootepad.newFile();
  46. if(e.getSource().equals(miOpen))
  47. textArea.setText(nootepad.openFile().toString());
  48. if(e.getSource().equals(miSave))
  49. nootepad.saveFile(textArea.getText().getBytes());
  50. }
  51. }
Nootepad.java
Листинг программы
  1. package main;
  2. import javax.swing.*;
  3. import java.io.*;
  4. public class Nootepad
  5. {
  6. private File currentFile;
  7. File newFile() {
  8. JFileChooser fileChooser = new JFileChooser();
  9. fileChooser.showSaveDialog(null);
  10. File file = new File(fileChooser.getSelectedFile().getPath());
  11. try {
  12. file.createNewFile();
  13. }
  14. catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. return file;
  18. }
  19. void saveFile(byte[] data) {
  20. try {
  21. if(currentFile != null) {
  22. currentFile.delete();
  23. currentFile.createNewFile();
  24. }
  25. else
  26. currentFile = newFile();
  27. FileOutputStream stream = new FileOutputStream(currentFile);
  28. stream.write(data);
  29. stream.close();
  30. }
  31. catch (Exception e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. byte[] openFile() {
  36. JFileChooser fileChooser = new JFileChooser();
  37. fileChooser.showOpenDialog(null);
  38. currentFile = fileChooser.getSelectedFile();
  39. long lenghtFile = currentFile.length();
  40. byte[] fileBytes = new byte[(int)lenghtFile];
  41. try {
  42. FileInputStream stream = new FileInputStream(currentFile);
  43. stream.read(fileBytes);
  44. stream.close();
  45. } catch (Exception e) {
  46. e.printStackTrace();
  47. }
  48. return fileBytes;
  49. }
  50. public File getCurrentFile() {
  51. return currentFile;
  52. }
  53. }
Main.java
Листинг программы
  1. package main;
  2. public class Main
  3. {
  4. public static void main(String argc[])
  5. {
  6. NootepadWindow nootepad = new NootepadWindow("MyNootepad", 1024, 1024);
  7. }
  8. }
Теперь ближе к проблеме: Не могу нормально реализовать функцию открытия файла (openFile()). Она должна возвращать байты файла, а потом я уже в textArea пишу их как символы. Видимо я где-то ошибся, потому что при открытии файла у меня вместо текста — неизвестные символы (ну или частично неизвестные, то есть половина может быть нормальной ). P.S. — Раньше изучал С++, возможно не знаю каких-то тонкостей Java . Также возможно что-то "намутил" с кодировками... Если есть ещё полезные замечания по коду — всегда рад услышать.

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут