Strona 1 z 1

MenuButton nie działa ???

Napisane: środa, 22 grudnia 2010, 13:17
przez Danny
Witam Panie Arkadiuszu przerabiam Pana kurs i natrafiłem na problem zaznaczam że jestem bardzo początkującym "programistą" Otóż chodzi o to że nie działa jeden projekt z lekcji a mianowicie ten przypominający menu.
Problem polega na tym że jak lecę strzałka w dół to jeżeli skupienie jest na drugim buttonie i nacisnę strzałkę na 3 to wywala błąd . Tak wygląda kod:

Code: Zaznacz cały

  private void keyPressedHandler(KeyEvent e)
                {
                    int dlMenu = panelMenu.getComponentCount();
                    if (i==0) i = 10*dlMenu;
                   if(e.getKeyCode() == KeyEvent.VK_DOWN)
                   {
                       panelMenu.getComponent(++i&dlMenu).requestFocus();
                       System.out.println(i);
                   }

                  else   if(e.getKeyCode() == KeyEvent.VK_UP)
                   {
                       panelMenu.getComponent(--i&dlMenu).requestFocus();
                       System.out.println(i);
                   }

                    else   if(e.getKeyCode() == KeyEvent.VK_ENTER)
                   {
                       ((MenuButton)e.getSource()).doClick();

                   }
                }


A tak wygląda błąd:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 3
at java.awt.Container.getComponent(Container.java:294)
at ppp.Main$MenuButton$1.keyPressedHandler(Main.java:62)
at ppp.Main$MenuButton$1.keyPressed(Main.java:53)
at java.awt.Component.processKeyEvent(Component.java:6225)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2801)
at java.awt.Component.processEvent(Component.java:6044)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:712)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676)
at java.awt.Component.dispatchEventImpl(Component.java:4502)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
W czym jest problem??

Re: MenuButton nie działa ???

Napisane: środa, 22 grudnia 2010, 21:42
przez Morfidon
Witam,

Proszę przyjrzeć się tej linii:

Code: Zaznacz cały

panelMenu.getComponent(++i&dlMenu).requestFocus();
czemu użył Pan tam operatora bitowego?

Pozdrawiam serdecznie

Re: MenuButton nie działa ???

Napisane: piątek, 24 grudnia 2010, 00:10
przez Danny
Tak jak mówiłem wcześniej jestem początkujący w te klocki oczywiście teraz wszystko już jest jasne :-)
Swoją drogą zastanawia mnie czy można by było zrobić jakieś lepsze wykonanie tego menu np. rozsuwane z elementami grafiki czy jest to możliwe w javie??

Re: MenuButton nie działa ???

Napisane: piątek, 24 grudnia 2010, 00:28
przez Morfidon
Nie wiem jakie to jest menu ^^, nie pamiętam, która to jest lekcja

Ogólnie to da się zrobić wszystko, tylko logiczne, jest że niektóre rzeczy są mniej, a niektóre bardziej skomplikowane ;)