D:\Documenti\Java\Informatica\BloccoNote\src\blocconote\Main.java
package blocconote;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Main extends JFrame {

        public JTextArea txtrTesto;

        public static void main(String[] args) {
                try {
                        UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
                } catch (Throwable e) {
                        e.printStackTrace();
                }
                EventQueue.invokeLater(new Runnable() {
                        public void run() {
                                try {
                                        Main frame = new Main();
                                        frame.setVisible(true);
                                } catch (Exception e) {
                                        e.printStackTrace();
                                }
                        }
                });
        }

        public Main() {
                setTitle("Senza nome - Blocco note");
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setBounds(100, 100, 450, 300);

                JMenuBar menuBar = new JMenuBar();
                setJMenuBar(menuBar);

                JMenu mnFile = new JMenu("File");
                mnFile.setMnemonic('F');
                menuBar.add(mnFile);

                JMenuItem mntmNuovo = new JMenuItem("Nuovo");
                mntmNuovo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
                mntmNuovo.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/nuovo.png")));
                mntmNuovo.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                nuovo();
                        }
                });
                mnFile.add(mntmNuovo);

                JMenuItem mntmApri = new JMenuItem("Apri...");
                mntmApri.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));
                mntmApri.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/apri.png")));
                mntmApri.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                apri();
                        }
                });
                mnFile.add(mntmApri);

                JMenuItem mntmSalva = new JMenuItem("Salva...");
                mntmSalva.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
                mntmSalva.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/salva.png")));
                mntmSalva.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                salva();
                        }
                });
                mnFile.add(mntmSalva);

                JSeparator separator = new JSeparator();
                mnFile.add(separator);

                JMenuItem mntmEsci = new JMenuItem("Esci");
                mntmEsci.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.ALT_MASK));
                mntmEsci.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                System.exit(0);
                        }
                });
                mnFile.add(mntmEsci);

                JMenu mnModifica = new JMenu("Modifica");
                mnModifica.setMnemonic('M');
                menuBar.add(mnModifica);
                
                JMenuItem mntmTaglia = new JMenuItem("Taglia");
                mntmTaglia.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));
                mntmTaglia.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/taglia.png")));
                mntmTaglia.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                taglia();
                        }
                });
                mnModifica.add(mntmTaglia);
                
                JMenuItem mntmCopia = new JMenuItem("Copia");
                mntmCopia.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
                mntmCopia.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/copia.png")));
                mntmCopia.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                copia();
                        }
                });
                mnModifica.add(mntmCopia);
                
                JMenuItem mntmIncolla = new JMenuItem("Incolla");
                mntmIncolla.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
                mntmIncolla.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/incolla.png")));
                mntmIncolla.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                incolla();
                        }
                });
                mnModifica.add(mntmIncolla);

                JMenu mnAiuto = new JMenu("?");
                mnAiuto.setMnemonic('?');
                menuBar.add(mnAiuto);
                
                JMenuItem mntmInformazioniSu = new JMenuItem("Informazioni su...");
                mntmInformazioniSu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, InputEvent.CTRL_MASK));
                mntmInformazioniSu.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/informazioni.png")));
                mntmInformazioniSu.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                informazioniSu();
                        }
                });
                mnAiuto.add(mntmInformazioniSu);

                JPanel contentPane = new JPanel();
                contentPane.setLayout(new BorderLayout(0, 0));
                setContentPane(contentPane);

                JToolBar toolBar = new JToolBar();
                contentPane.add(toolBar, "North");

                JButton btnNuovo = new JButton("");
                btnNuovo.setFocusPainted(false);
                btnNuovo.setToolTipText("Nuovo");
                btnNuovo.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/nuovo.png")));
                btnNuovo.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                nuovo();
                        }
                });
                toolBar.add(btnNuovo);

                JButton btnApri = new JButton("");
                btnApri.setFocusPainted(false);
                btnApri.setToolTipText("Apri");
                btnApri.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/apri.png")));
                btnApri.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                apri();
                        }
                });
                toolBar.add(btnApri);

                JButton btnSalva = new JButton("");
                btnSalva.setFocusPainted(false);
                btnSalva.setToolTipText("Salva");
                btnSalva.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/salva.png")));
                btnSalva.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                salva();
                        }
                });
                toolBar.add(btnSalva);
                
                JSeparator separator1 = new JSeparator();
                separator1.setOrientation(SwingConstants.VERTICAL);
                toolBar.add(separator1);
                
                JButton btnTaglia = new JButton("");
                btnTaglia.setFocusPainted(false);
                btnTaglia.setToolTipText("Taglia");
                btnTaglia.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/taglia.png")));
                btnTaglia.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                taglia();
                        }
                });
                toolBar.add(btnTaglia);
                
                JButton btnCopia = new JButton("");
                btnCopia.setFocusPainted(false);
                btnCopia.setToolTipText("Copia");
                btnCopia.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/copia.png")));
                btnCopia.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                copia();
                        }
                });
                toolBar.add(btnCopia);
                
                JButton btnIncolla = new JButton("");
                btnIncolla.setFocusPainted(false);
                btnIncolla.setToolTipText("Incolla");
                btnIncolla.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/incolla.png")));
                btnIncolla.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                incolla();
                        }
                });
                toolBar.add(btnIncolla);
                
                JSeparator separator2 = new JSeparator();
                separator2.setOrientation(SwingConstants.VERTICAL);
                toolBar.add(separator2);
                
                JButton btnInformazionisu = new JButton("");
                btnInformazionisu.setFocusPainted(false);
                btnInformazionisu.setToolTipText("Informazioni su...");
                btnInformazionisu.setIcon(new ImageIcon(Main.class.getResource("/blocconote/img/informazioni.png")));
                btnInformazionisu.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                informazioniSu();
                        }
                });
                toolBar.add(btnInformazionisu);

                JScrollPane scrollPane = new JScrollPane();
                contentPane.add(scrollPane, "Center");

                txtrTesto = new JTextArea();
                txtrTesto.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
                scrollPane.setViewportView(txtrTesto);
        }

        public void nuovo() {
                if (JOptionPane.showConfirmDialog(this, "Se non è stato salvato, il documento corrente andrà perso.\nDesideri continuare?", "Nuovo documento", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
                        txtrTesto.setText("");
                        setTitle("Senza nome - Blocco note");
                }
        }

        public void apri() {
                JFileChooser fc = new JFileChooser();
                fc.setAcceptAllFileFilterUsed(false);
                fc.addChoosableFileFilter(new FileNameExtensionFilter("Documenti di testo (*.txt)", "txt"));
                fc.setAcceptAllFileFilterUsed(true);
                if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
                        nuovo();
                        try {
                                FileReader fr = new FileReader(fc.getSelectedFile());
                                txtrTesto.read(fr, null);
                                fr.close();
                                setTitle(fc.getSelectedFile().getName() + " - Blocco note");
                                JOptionPane.showMessageDialog(this, "File letto con successo", "Informazione", JOptionPane.INFORMATION_MESSAGE);
                        } catch (FileNotFoundException e) {
                                JOptionPane.showMessageDialog(this, "File non trovato", "Errore", JOptionPane.ERROR_MESSAGE);
                        } catch (IOException e) {
                                JOptionPane.showMessageDialog(this, "Errore di lettura del file", "Errore", JOptionPane.ERROR_MESSAGE);
                        }
                }
        }

        public void salva() {
                JFileChooser fc = new JFileChooser();
                fc.setAcceptAllFileFilterUsed(false);
                fc.addChoosableFileFilter(new FileNameExtensionFilter("Documenti di testo (*.txt)", "txt"));
                fc.setAcceptAllFileFilterUsed(true);
                if (fc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)
                        try {
                                if (!fc.getSelectedFile().getPath().endsWith(".txt"))
                                        fc.setSelectedFile(new File(fc.getSelectedFile().getPath()+".txt"));
                                FileWriter fw = new FileWriter(fc.getSelectedFile());
                                fw.write(txtrTesto.getText());
                                fw.close();
                                setTitle(fc.getSelectedFile().getName() + " - Blocco note");
                                JOptionPane.showMessageDialog(this, "File salvato con successo", "Informazione", JOptionPane.INFORMATION_MESSAGE);
                        } catch (FileNotFoundException e) {
                                JOptionPane.showMessageDialog(this, "File non trovato", "Errore", JOptionPane.ERROR_MESSAGE);
                        } catch (IOException e) {
                                JOptionPane.showMessageDialog(this, "Errore di scrittura del file", "Errore", JOptionPane.ERROR_MESSAGE);
                        }
        }
        
        public void taglia() {
                txtrTesto.cut();
        }

        public void copia() {
                txtrTesto.copy();
        }

        public void incolla() {
                txtrTesto.paste();
        }
        
        public void informazioniSu() {
                JOptionPane.showMessageDialog(this, "Blocco note\nCopyright © GfO 2016", "Informazioni su Blocco note", JOptionPane.INFORMATION_MESSAGE);
        }

}