2012-05-02 5 views
1

У меня есть массив из 30 кнопок []. У меня есть переменная buttonClicked. Когда я нажимаю кнопку, как я могу получить индекс и сохранить номер индекса в buttonClicked?Вернуть индекс нажатой кнопки?

Спасибо :)

JButton [] buttons = new JButton[30]; 


     for(int i = 1; i <= 30; i++) 
     {  
      int btnNumber = (i > 10 && i <= 20) ? (31 - i) : i; 

      System.out.printf("i = %d, btnNumber = %d%n", i, btnNumber); 
      buttons[btnNumber - 1] = new JButton("label " + btnNumber); 
      //buttons[btnNumber - 1].setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
      buttons[btnNumber - 1].setBorder(BorderFactory.createEtchedBorder()); 
      buttons[btnNumber - 1].setOpaque(true); 
      buttons[btnNumber - 1].setBackground(Color.white); 

      //Puts the player 1 piece on button 1,3,5,7,9 and player 2 piece on button 2,4,6,8,10 
      if ((btnNumber - 1) < 10) 
      { 
       if (((btnNumber - 1) % 2) == 0) 
       { 
        buttons[btnNumber - 1].setIcon(piece1); 
       } 
       else 
       { 
        buttons[btnNumber - 1].setIcon(piece2); 
       } 
      } 
      centerPanel.add(buttons[btnNumber - 1]); 
     } 

// Ниже то, что я пытаюсь сделать, я знаю, что это не правильно.

public void move() 
{ 
Move = dice.getDiceResult(); 
int buttonClicked = 0; 

if(playerOneTurn =true) 
{ 
buttonclicked + diceResult(); 
} 

// пересмотренная

public class MyActionListener implements ActionListener { 
Dice dice; 
private boolean playerOneTurn = true; 
private boolean playerTwoTurn = false; 
    @Override 
    public void actionPerformed(ActionEvent e) 
{ 
    String num = e.getActionCommand(); 
    int index = Integer.parseInt(num); 
    int move = dice.getDiceResult(); 
    int positionLanding = 0; 

    if(playerOneTurn = true) 
    { 
     positionLanding = index + move; 
     positionLanding.setIcon("piece1");//how can I set the image Icon to this position? 
    } 

} 
} 
+4

Показать код. Мы не против читателей. Вы используете [tag: swing]? –

+0

Вы можете посмотреть API Java keypress на странице [this] (http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html) ссылка – AurA

+0

ButtonClickEvents не работает для этого случая? (Нажмите одну из этих 30 кнопок или нажмите другую кнопку?) – phantasmagoria

ответ

2

Вы можете найти кнопку в ActionEvent.getSource(). Чтобы найти индекс, это просто вопрос итерации по массиву, поиск этой конкретной кнопки.

+0

@ user1329572 Это также будет работать с AWT. –

+0

@ АндрюТомпсон, я знаю. – user1329572

2

Самый красивый способ - использовать Component.setName. Тогда вам не нужно даже поддерживать переменные с компонентами - вы можете перейти прямо с названия

4

1) putClientProperty

buttons[i][j].putClientProperty("column", i); 
buttons[i][j].putClientProperty("row", j); 
buttons[i][j].addActionListener(new MyActionListener()); 

и getClientProperty

public class MyActionListener implements ActionListener { 

@Override 
public void actionPerformed(ActionEvent e) { 
    JButton btn = (JButton) e.getSource(); 
    System.out.println("clicked column " + btn.getClientProperty("column") 
      + ", row " + btn.getClientProperty("row")); 
} 

2) ActionCommand

2

Я предпочитаю стратегию, предложенную aioobe, но вот другой способ.

buttons[btnNumber - 1] = new JButton("label " + btnNumber); 
buttons[btnNumber - 1].setActionCommand("" + btnNumber); 
// ... 

// ...later.. in the actionPerformed() method 
String num = actionEvent.getActionCommand(); 
int index = Integer.parseInt(num); 
// ..proceed.. 
+0

Проверьте версию. Как установить идентификатор изображения в индекс PositionLanding? Это дает int не может быть устранена ошибка. –

+0

* «Пожалуйста, проверьте пересмотренную версию». * Пожалуйста, отправьте сообщение [SSCCE] (http://sscce.org/). –

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