// Paweł Rzechonek (c) November 2005
// okno Swing ze skrótami klawiszowymi
// (skróty klawiszowe, menu kontekstowe)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ProsteSkrotyKlawSwing extends JFrame
{
    private final String akcja = "akcja: ";
    private Label opis = new Label(akcja);

    class PopupListener extends MouseAdapter
    {
        JPopupMenu kontekst;
        PopupListener (JPopupMenu pm) { kontekst = pm; }
        public void mousePressed(MouseEvent ev) { pokaz(ev); }
        public void mouseReleased(MouseEvent ev) { pokaz(ev); }
        private void pokaz(MouseEvent ev)
        {
            if (ev.isPopupTrigger()) kontekst.show(ev.getComponent(),ev.getX(),ev.getY());
        }
    }

    public ProsteSkrotyKlawSwing ()
    {
        super("proste okno w technologii Swing ze skrótami klawiszowymi");
        getContentPane().add(opis,BorderLayout.SOUTH);

        JMenuBar mb = new JMenuBar();
        JMenu m = null;
        JMenuItem mi = null;
        ImageIcon ii = null;

        m = new JMenu("Plik");
        m.setMnemonic(KeyEvent.VK_P);
          mi = new JMenuItem("Nowy",KeyEvent.VK_N);
          mi.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent ev)
            { opis.setText(akcja+"Nowy"); } });
        m.add(mi);
          mi = new JMenuItem("Otwórz...");
          mi.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent ev)
            { opis.setText(akcja+"Otwórz..."); } });
        m.add(mi);
          mi = new JMenuItem("Zapisz",KeyEvent.VK_Z);
          mi.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent ev)
            { opis.setText(akcja+"Zapisz"); } });
        m.add(mi);
          mi = new JMenuItem("Zapisz jako...");
          mi.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent ev)
            { opis.setText(akcja+"Zapisz jako..."); } });
        m.add(mi);
        m.addSeparator(); // separator
          mi = new JMenuItem("Wyczyść",KeyEvent.VK_W);
          mi.setAccelerator(KeyStroke.getKeyStroke("ctrl X")); // skrót klawiszowy
          mi.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent ev)
            { opis.setText(akcja); } });
        m.add(mi);
        mb.add(m);

        mb.add(Box.createHorizontalGlue()); // odsunięcie następnych elementów menu na prawo

        m = new JMenu("Język");
        m.setMnemonic(KeyEvent.VK_J);
          ii = stworzIkone("ang.gif");
          mi = new JMenuItem("Angielski",ii);
          mi.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent ev)
            { opis.setText(akcja+"Język angielski"); } });
        m.add(mi);
          ii = stworzIkone("pol.gif");
          mi = new JMenuItem("Polski",ii);
          mi.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent ev)
            { opis.setText(akcja+"Język polski (zażółć gęślą jaźń)"); } });
        m.add(mi);
        mb.add(m);
        
        JPopupMenu pm = new JPopupMenu(); // menu kontekstowe
          mi = new JMenuItem("Opcja 0");
          mi.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent ev)
            { opis.setText(akcja+"Opcja 0"); } });
        pm.add(mi);
          mi = new JMenuItem("Opcja 1");
          mi.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent ev)
            { opis.setText(akcja+"Opcja 1"); } });
        pm.add(mi);
        opis.addMouseListener(new PopupListener(pm));

        setJMenuBar(mb);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,120);
        setLocation(60,60);
        setVisible(true);
    }

    protected static ImageIcon stworzIkone (String obraz)
    {
        java.net.URL imgURL = ProsteSkrotyKlawSwing.class.getResource(obraz);
        if (imgURL!=null) return new ImageIcon(imgURL);
        else return null;
    }

    public static void main (String[] arg)
    {
        new ProsteSkrotyKlawSwing();
    }
}
