Sviluppare un Blocco Note in Java

Il linguaggio Java supporta un modello per gestire gli eventi dai componenti di un’applicazione grafica, in particolare da dispositivi di input come tastiera e mouse. Attraverso i componenti, in grado di produrre gli eventi, e gli oggetti, che implementano apposite interfacce che si registrano presso i primi, possiamo ricevere gli eventi generati. In questo articolo vedremo come creare un’applicazione molto semplice che simula il comportamento del blocco note di Windows, realizzeremo il tutto attraverso l’uso di un componente TextArea, scopriremo come inserirlo in una finestra contenitore e come sia possibile dotare quest’ultima di un menu.

Blocco Note in Java

Blocco Note in Java su Linux Ubuntu 10.04

Un componente è definito come un’area di visualizzazione capace di ricevere gli eventi generati dai dispositivi di input come il mouse o la tastiera. In generale in Java ogni componente è gestito attraverso un opportuno oggetto, in questo esempio utilizzeremo le classi del package java.awt. Un componente deve essere inserito in un contenitore per poter essere visualizzato, in Java ogni componente possiede un oggetto LayoutManager responsabile della disposizione degli elementi nel contenitore. Vediamo quindi il codice sorgente per creare un semplice Notepad in Java:

import java.io.*;
import java.awt.*;
import java.awt.event.*;

public class Notepad implements
   WindowListener, ActionListener
{
    private Frame wnd;
    private TextArea ta;

    public void windowActivated(WindowEvent evt) {}
    public void windowDeactivated(WindowEvent evt) {}
    public void windowIconified(WindowEvent evt) {}
    public void windowDeiconified(WindowEvent evt) {}
    public void windowOpened(WindowEvent evt) {}

    public void windowClosed(WindowEvent evt)
    {
        System.exit(0);
    }

    public void windowClosing(WindowEvent evt)
    {
        wnd.dispose();
    }

    public void actionPerformed(ActionEvent evt)
    {
        String cmd = evt.getActionCommand();
        if (cmd.equals("Esci"))
        {
            wnd.dispose();
        }
        else if (cmd.equals("Apri"))
        {
            ta.setText("");
            FileDialog d = new FileDialog(wnd,
               "Apri documento", FileDialog.LOAD);
            d.setVisible(true);
            if (d.getFile() != null)
            {
                try
                {
                    String line;
                    BufferedReader in = new BufferedReader(
                        new FileReader(d.getDirectory() +
                            File.separator + d.getFile()));
                    while ((line = in.readLine()) != null)
                        ta.append(line + "\n");
                }
                catch (Exception e)
                {
                    System.out.println("Errore: " + e);
                }
            }
        }
        else if (cmd.equals("Salva"))
        {
        }
        else if (cmd.equals("Salva con nome..."))
        {
        }
        else if (cmd.equals("Informazioni su..."))
        {
        }
    }

    public Notepad(Frame f, TextArea t)
    {
        wnd = f;
        ta = t;
    }

    public static void main(String[] args)
    {
        Frame f = new Frame("Blocco note in Java");
        TextArea t = new TextArea();
        Notepad n = new Notepad(f, t);
        MenuBar mb = new MenuBar();

        Menu m = new Menu("File");
        mb.add(m);
        m.add("Apri");
        m.add("Salva");
        m.add("Salva con nome...");
        m.addSeparator();
        m.add("Esci");

        m.addActionListener(n);

        m = new Menu("Aiuto");
        mb.add(m);
        m.add("Informazioni su...");

        m.addActionListener(n);

        f.addWindowListener(n);
        f.setMenuBar(mb);
        f.add(t);
        f.setSize(300, 400);
        f.setVisible(true);
    }
}

Come è possibile notare, l’applicazione è formata da una sola classe che implementa due interfacce: WindowListener ed ActionListener per far sì che un oggetto di questa classe possa ascoltare gli eventi prodotti dalla finestra e dal menu. Nel metodo main viene inizializzata la finestra e viene definito il gestore degli eventi prodotti dai vari componenti, abbiamo intercettato quelli del menu, ma abbiamo implementato soltanto quello di apertura di un file di testo, tanto si tratta soltanto di un esempio! Da notare come viene creato il menu: prima si crea la MenuBar e quindi ci si associa un Menu, a cui a sua volta si aggiungono le varie voci.

Informazioni su Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.
Questa voce è stata pubblicata in Java. Contrassegna il permalink.