Obsługa zdarzeń w Menu

0

Witam,
mam taki problem, jak obsłużyć zdarzenia w menu,
napisałem taki programik:

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

public class Editor extends JFrame
{
private JMenuBar menuBar;
private JMenu menu, submenu;
private JMenuItem menuItem;


public Editor()
	{
	JFrame frame = new JFrame("Edytor Tekstu");
	frame.setSize(800,600);

// przy okazji, jak ustawić aby aplikacja uruchamiała sie na całym ekranie a jak wycentrowana
//kombinowałem z odczytywaniem szerokosci i wysokosci ekranu, ale moze jest jakis lepszy i prostszy //sposob

	frame.setLayout(new BorderLayout());

	menuBar=new JMenuBar(); //Tworzenie Paska Menu

//*********************	Menu Plik *********************
	menu = new JMenu("Plik"); 
	menu.setMnemonic(KeyEvent.VK_P);
	menuBar.add(menu);

	//Nowy
	menuItem = new JMenuItem("Nowy", new ImageIcon("ikona.gif"));
	menuItem.setMnemonic(KeyEvent.VK_N);
	menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.ALT_MASK));
	menu.add(menuItem);

	//Otwórz
	menuItem = new JMenuItem("Otwórz", new ImageIcon("ikona.gif"));
	menuItem.setMnemonic(KeyEvent.VK_O);
	menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.ALT_MASK));
	menu.add(menuItem);

//*********************	Menu Edycja *********************
	menu = new JMenu("Edycja");
	menu.setMnemonic(KeyEvent.VK_E);
	menuBar.add(menu);

	//Cofnij
	menuItem = new JMenuItem("Cofnij", new ImageIcon("ikona.gif"));
	menuItem.setMnemonic(KeyEvent.VK_Z);
	menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, ActionEvent.ALT_MASK));
	menu.add(menuItem);

	//Ponów
	menuItem = new JMenuItem("Ponów", new ImageIcon("ikona.gif"));
	menuItem.setMnemonic(KeyEvent.VK_Y);
	menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, ActionEvent.ALT_MASK));	
	menu.add(menuItem);

	frame.add(menuBar, BorderLayout.NORTH);
	frame.setVisible(true);
	frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

public static void main(String [] args)
	{
	new Editor();
	}
}

chciałbym aby po wybraniu "Nowy" odpalilo sie cosik, a po wybraniu "Otworz" cosik innego.
Normalnie rejestrowalem sluchaczy i sprawdzalem zrodlo, kto zglosil obsluge, ale tu jest zawsze MenuItem i nie bardzo wiem jak postapic,

Jak ktos ma jakis pomysl, to prosze o podpowiedz, pozdrawiam!

0

Maksymalizacja - metoda setState(...),
centrowanie - setLocationRelativeTo(null).
Imho, masz niepotrzebne (i brużdżące) pole menuItem w klasie. Powinieneś wybrać jedną z dwóch możliwości:

  • utworzyć pole dla każdej pozycji w menu,
  • użyć zmiennej lokalnej menuItem w konstruktorze.
    W tym drugim przypadku do rozpoznania co wybrał użytkownik użyj metody getActionCommand().
0

dzieki,
o roznych polach dla kazdej pozycji to myslalem, tylko wydawalo mi sie troche podejsciem "na piechote" ale jak trzeba to sie zrobi

mozesz mi tylko dopowiedziec co dalo by mi przeniesienie MenuItem do konstruktora?? jakos nie widze idei w tym oraz tego jak to niby ma dzialac, bo dalej mam pola nazwane tak samo :(

0

Przecież napisałem

W tym drugim przypadku do rozpoznania co wybrał użytkownik użyj metody getActionCommand().

0

mozesz podpowiedziec jak mam użyć tej metody,
kombinuje, kombinuje i nie wychodzi mi :(

dodalm cos takiego:
import java.awt.event.ActionEvent;

potem usunąłem z klasy głównej
private JMenuItem menuItem;

za to w konstruktorze Editor() dodałem
JMenuItem menuItem;

dla przykladowego pola mam:

//Nowy
menuItem = new JMenuItem("Nowy", new ImageIcon("icona.gif"));
menuItem.setMnemonic(KeyEvent.VK_N);
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.ALT_MASK));
menuItem.addActionListener( this ); // Czy dla innych menu mam dodawac tak samo?
menu.add(menuItem);

no i przechwytuje jak ktos cos wybierze tak:

public void actionPerformed( ActionEvent e )
      {
	String text;		
	text=menuItem.getActionCommand();
  	}

tylko mi nie widzi getActionCommand() :(

aha i jeszcze w definicji klasy mam tak:
public class Editor extends JFrame implements ActionListener

0
public void actionPerformed( ActionEvent e )
      {
        String text;               
        text=e.getActionCommand();
        if(text.equals("Edytuj"))
            .....
          }
0

mala modyfikacja a cieszy :)

Dzieki wielkie i pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1