import java.awt.*; import javax.swing.*; import javax.swing.UIManager; import java.awt.BorderLayout; import java.awt.FileDialog; import java.awt.Frame; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JRadioButtonMenuItem; public class MyNotepad extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private TextArea area; private JMenuBar mb; private JMenu mFile; private JMenu mEdit; private JMenu mView; private JMenu mHelp; private JMenuItem novii; private JMenuItem open; private JMenuItem save; private JMenuItem exit; private JMenuItem cut; private JMenuItem copy; private JMenuItem paste; private JMenuItem delete; private JMenuItem select_all; private JRadioButtonMenuItem cpUTF8; private JRadioButtonMenuItem cp1251; private JRadioButtonMenuItem cp866; private JRadioButtonMenuItem cpkoi8r; private JMenuItem about; private String encoding = "UTF-8"; private String buf = ""; public MyNotepad() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); area = new TextArea(); add(area); mb = new JMenuBar(); mFile = new JMenu("Файл"); novii = new JMenuItem("Новый"); open = new JMenuItem("Открыть"); save = new JMenuItem("Сохранить"); exit = new JMenuItem("Выйти"); novii.addActionListener(this); open.addActionListener(this); save.addActionListener(this); exit.addActionListener(this); mFile.add(novii); mFile.add(open); mFile.add(save); mFile.addSeparator(); mFile.add(exit); mb.add(mFile); //***Редактирование mEdit = new JMenu("Редактирование"); cut = new JMenuItem("Вырезать"); copy = new JMenuItem("Копировать"); paste = new JMenuItem("Вставить"); delete = new JMenuItem("Удалить"); select_all = new JMenuItem("Выделить ВСЁ"); cut.addActionListener(this); copy.addActionListener(this); paste.addActionListener(this); delete.addActionListener(this); select_all.addActionListener(this); mEdit.add(cut); mEdit.add(copy); mEdit.add(paste); mEdit.add(delete); mEdit.add(select_all); mb.add(mEdit); //***Редактирование_енд=) mView = new JMenu("Вид"); cpUTF8 = new JRadioButtonMenuItem("UTF-8", true); cp1251 = new JRadioButtonMenuItem("CP1251"); cp866 = new JRadioButtonMenuItem("CP866"); cpkoi8r = new JRadioButtonMenuItem("KOI8-R"); cpUTF8.addActionListener(this); cp1251.addActionListener(this); cp866.addActionListener(this); cpkoi8r.addActionListener(this); mView.add(cpUTF8); mView.add(cp1251); mView.add(cp866); mView.add(cpkoi8r); mb.add(mView); mHelp = new JMenu("Справка"); about = new JMenuItem("О программе..."); about.addActionListener(this); mHelp.add(about); mb.add(mHelp); setJMenuBar(mb); pack(); } public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == novii) { novii(); } else if (source == open) { openFile(); } else if (source == save) { saveFile(); } else if (source == exit) { exit(); } else if (source == cut) { cut(); } else if (source == copy) { copy(); }else if (source == paste) { paste(); }else if (source == delete) { delete(); }else if (source == select_all) { select_all(); }else if (source == about) { about(); }else if (source == cpUTF8) { cp1251.setSelected(false); cp866.setSelected(false); cpkoi8r.setSelected(false); encoding = cpUTF8.getText(); } else if (source == cp1251) { cpUTF8.setSelected(false); cp866.setSelected(false); cpkoi8r.setSelected(false); encoding = cp1251.getText(); } else if (source == cp866) { cpUTF8.setSelected(false); cp1251.setSelected(false); cpkoi8r.setSelected(false); encoding = cp866.getText(); } else if (source == cpkoi8r) { cpUTF8.setSelected(false); cp1251.setSelected(false); cp866.setSelected(false); encoding = cpkoi8r.getText(); } } //Методы поля mFile private void novii() { area.setText(""); } private void exit() { System.exit(0); } //Методы поля mEdit private void cut() { buf = area.getSelectedText(); area.replaceRange ("", area.getSelectionStart(), area.getSelectionEnd()); } private void copy() { buf = area.getSelectedText(); } private void paste() { area.replaceRange (buf, area.getSelectionStart(), area.getSelectionEnd()); } private void delete() { area.replaceRange ("", area.getSelectionStart(), area.getSelectionEnd()); } private void select_all() { area.selectAll(); } private void about() { JOptionPane.showMessageDialog(null,"Текстовый редактор.\n Сделан для лабораторной работы #4.\n Автор: Лисник Александр"); } //Методы поля mFile: "Открыть" и "Сохранить" private void saveFile() { FileDialog fd = new FileDialog(this, " Сохранить", FileDialog.SAVE); fd.setVisible(true); String path = fd.getDirectory(); if (path == null) { return; } path += fd.getFile(); byte[] buf; OutputStream os = null; try { buf = area.getText().getBytes(encoding); os = new FileOutputStream(path); os.write(buf); } catch (Exception e) { e.printStackTrace(); return; } finally { if (os != null) { try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } } private void openFile() { FileDialog fd = new FileDialog(this, " Загрузить", FileDialog.LOAD); fd.setVisible(true); String path = fd.getDirectory(); if (path == null) { return; } path += fd.getFile(); StringBuilder sb = new StringBuilder(); BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(new FileInputStream(path), encoding)); for (int ch = br.read(); ch != -1; ch = br.read()) { sb.append((char) ch); } area.setText(sb.toString()); } catch (Exception e) { e.printStackTrace(); return; } finally { if (br != null) { try { br.close(); } catch (Exception e) { e.printStackTrace(); } } } } // Главный класс main public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e){} Frame frame = new MyNotepad(); frame.setSize(800, 600); frame.setVisible(true); } }); } }