Блокнот на 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д