Problem z JMenuBar

0

Mam problem z JMenuBar mianowicie;
jako pole klasy deklaruje sobie np. przycisk JButton start;
Całe gui podzielone mam na metody z których każda zwraca odpowiedni fragment np. za ten przycisk odpowiedzialna jest metoda getStart();
W niej następuje definicja przycisku, określam jego położenie oraz opcje Enabled na false.
Chciałbym, by po kliknięciu w jedno z opcji z JMenuBar np. Endbled zmieniało się na true. Robię to samo w odpowiedzi na inne zachowania użytkownika np kliknięcie w inny przycisk i działa ale nie działa w JMenuBar. Zwracany mam błąd NullPointerException w linijce gdzie robię start.setEnabled(true). Pomyślałem więc, że zdefiniuje przycisk już przy deklaracji a nie w metodzie(chociaż definicja w metodzie działa gdy robie to samo np. za pomocą innego przycisku). Tak zrobiłem błąd już nie wyskakuje ale przycisk nie reaguje tzn nic nie zmienia się cały czas Enabled jest false.
Dlaczego to co robię w programie i działa nie działa za pomocą JMenuBar czy to menu czymś się różni?

0

No lepiej będzie, jeżeli jednak kawałek kodu wkleisz...
Interesuje mnie to Twoje getStart(), ale najważniejsze to actionListener na pozycji w JmenuBar - czyli to gdzie chcesz aktywować button;

0
 
menu = new JMenuBar();
plik = new JMenu("Plik");
opcja = new JMenu("Opcja");
plik.add(opcja);
menu.add(plik);
        opcja.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                start.setEnabled(true);
            }
	}); 

Wszystko oczywiście jest podeklarowane wcześniej. Zrobienie tego samego setEnabled gdzie indziej np. po naciśnięciu jakiegoś przycisku działa nie działa tylko w JMenuBar... Jeśli bym tam wrzucił, że w odpowiedzi na naciśnięcie ma wypisać coś to zadziała nie działaja tylko operacje z elementami gui czy jakimiś zmiennymi.
oto co wyrzuca:

 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:308)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2713)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
	at java.awt.EventQueue.access$000(EventQueue.java:101)
	at java.awt.EventQueue$3.run(EventQueue.java:666)
	at java.awt.EventQueue$3.run(EventQueue.java:664)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:680)
	at java.awt.EventQueue$4.run(EventQueue.java:678)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
0

Przysłałeś nieinteresujący środek komunikatu o błędzie. Brak początku z typem wyjątku, brak końca z Twoim kodem (tzn. jaka Twoja metoda wywołała błąd).

0

Nie wiem gdzie wysypuje Tobie wyjątkiem, bo nie widać tego w stack trace - nie ma tam odniesienia do Twojego kodu (chociażby Twojego action listenera) co może sugerować, że wyjątek blokuje nawet dojście do linijki ....setEnabled(true);
Dalej nie wiemy co jest nie tak - a żeby było śmieszniej - uciąłeś nagłówek stack trace gdzie jest informacja o rodzaju wyjątku (u Ciebie NPE z tego co pamiętam).
Edit: czyli to co @bogdans napisał
2)
Z tego co widzę, chcesz zrobić w Menu, pozycje rowijaną o nazwie Plik, a w niej pozycję o nazwie Opcja tak?
Opcja powinna być typu JMenuItem. W taki sposób jak Ty to robisz tworzy się rozwijane podmenu.

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