JMenuItem setEnabled()

0

Witam, czy zna może ktoś metodę jak deaktywować JMenuItem odpowiadający za wyświetlenie nowego okna
tak a żeby nie mozna było poprzez ta pozycję JMenuItem drugi raz wyświetlić tego samego okna, kombinowałem troszkę z wyłapywaniem zdarzeń okna ale nie wychodzi :( wyrzuca błedy aplikacyjka.
Menu odpowiada za wyświetlanie wielu nowych okienek a każde okienko musi być otworzone tylko w 1 egzemplarzu.


class dzialanie_menu extends AbstractAction
{
	public dzialanie_menu(String nazwa)
	{
		super(nazwa);
	}

	public void actionPerformed(ActionEvent zdarzenie)
	{
		Object dzialanie = getValue(Action.NAME);


			if(dzialanie == "Zakończ pracę")
			{
							System.exit(0);

			}

			else if(dzialanie == "Kalkulator kasowy")
			{
				Okno_Kasa okno = new Okno_Kasa();
				okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				okno.show();
				

			}

			else if(dzialanie == "Przeliczanie dni ")
			{


				okno1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				okno1.show();
				ILEdni.setEnabled(false);


			}





	}

private class sluchacz_menu implements MenuListener
		{


			public void menuSelected(MenuEvent zd)
			{
				
								

								ILEdni.isEnabled();
								

			}


			public void menuDeselected(MenuEvent zd){}
			public void menuCanceled(MenuEvent zd){}
		}

Jeżeli ktoś zna rozwiązanie to proszę o pomoc

0

hej

mozesz zrobic tak: utwprzyc sluchacza, ktory bedzie np tylko odpowiedzialny za deaktywowanie okna, w tym sluchaczu skorzystaj z metody "getSource()", ktora zwraca zrodlo zdarzenia, czyli komponent ktory wywolal zdarzenie, u Ciebie JMenuItem. Pamietaj ze ta metoda zwraca komponent wiec wynik musisz rzutowac , np. tak: JComponent comp = new (JComponent) e.getSource(); Tutaj masz krotki przyklad, po kliknieciu w przycisk wysietla sie napis, u Ciebie tworzy okno, ale drugi raz juz nie mozna kliknac, bo po pierwszym kliknieciu wystepuje metoda setEnabled(false); i komponent jest deaktywowany. Oczywiscie mozesz dolaczyc osobno sluchacza do kazdego komponentu tworzac anonimowa klase wewnetrzna jednak w przypadku duzej ilosci takich klas to zly pomysl

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

class MojaForum extends JFrame implements ActionListener
{
MojaForum()
{
Container cp = getContentPane();
JMenuBar mb = new JMenuBar();
JMenu menu = new JMenu("file");
JMenuItem mi = new JMenuItem("ddd");
mi.addActionListener(this);
menu.add(mi);
mb.add(menu);
setJMenuBar(mb);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
show();
}

public void actionPerformed(ActionEvent e)
{
	JComponent comp = (JComponent)e.getSource();
	System.out.println("dsfsdf");
	comp.setEnabled(false);
}

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

}

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