2013-07-08 3 views
-1

Я хочу добавить JButtons в JPanel с помощью FlowLayout или любой другой макет и перемещение между JButtons использованием проблемы Up и Down key..Having при движении вверх и вниз, потому что я не знаю, строки и столбцы JButton ,Перемещение между JButtons с помощью клавиатуры

public class abc{ 
List<ControlCenterButton> buttons=getButtons();  
JPanel buttonPanel= new JPanel(); 
buttonPanel.setLayout(new FlowLayout) 
for (int i = 0; i < buttons.size(); i++) { 
      ControlCenterButton button = buttons.get(i); 
      if (button.getLayarID().equals(id)) { 
       flag = true; 
       button.addActionListener(this); 
       button.setPosition(i); 
       button.addMouseListener(new MouseAdapter() { 
        @Override 
        public void mousePressed(MouseEvent mouseEvent) { 
         buttonPanel.requestFocusInWindow(); 
        } 
       }); 
       buttonPanel.add(button); 
} 

    buttonPanel.addKeyListener(new KeyAdapter() { 
      @Override 
      public void keyPressed(KeyEvent keyEvent) { 
       final ControlCenterButton selectedControlCenterButton =  (ControlCenterButton) Session.getSession().getAttribute("controlcenter.selectedbutton"); 
       int position = selectedControlCenterButton.getPosition(); 
       int keycode = keyEvent.getKeyCode(); 
       switch (keycode) { 
        case KeyEvent.VK_RIGHT: { 
         if (position + 1 >= buttons.size()) { 
          ControlCenterButton.selectButton(buttons.get(0)); 
         } else 
          ControlCenterButton.selectButton(buttons.get(position +)); 
         break; 
        } 
      case KeyEvent.VK_UP: { 
          break; 
         } 
         case KeyEvent.VK_DOWN: { 
         }    
     case KeyEvent.VK_ENTER: { 
         selectedControlCenterButton.requestFocusInWindow(); 
         new ControlCenterButton().openApplication(selectedControlCenterButton); 
         break; 
        } 
       } 
} 
public class ControlCenterButton extends JButton implements ActionListener { 
private int position; 
public int getPosition() { 
     return position; 
} 

public void setPosition(int position) { 
    this.position = position; 
} 
} 
+0

какой макет вы используете? –

+0

он уже упомянул, что flowlayout .... –

+0

Что вы пробовали? Вы должны опубликовать код и объяснить свои текущие/желаемые результаты. – Dahaka

ответ

-1
  1. Добавить ключ слушателя ко всем кнопкам, которые прослушивает вверх и вниз нажатий

  2. Добавьте х, у координаты кнопки. То есть. вы можете либо расширить JButton, либо иметь какую-то карту, которая связывает координаты с JButton.

  3. Когда нажата кнопка «вверх» и «вниз», подсчитайте, куда должен попасть фокус, после чего вы выясните, на какой кнопке оно должно быть. звоните requestFocusInWindow() на кнопку.

+2

* «call grabFocus() на кнопке.» * Лучше позвонить ['requestFocusInWindow()'] (http://docs.oracle.com/javase/7/ документы/API/Java/AWT/Component.html # requestFocusInWindow% 28% 29). Фактически, цитируется из JavaDocs .. * «Этот метод предназначен для использования с помощью реализации фокуса. ** Клиентский код не должен использовать этот метод; ** вместо этого он должен использовать' requestFocusInWindow() '." * –

+0

спасибо .. ............ –

+0

нет - забудьте все о keyListeners, узнайте все ключевые привязки :-) – kleopatra

Смежные вопросы