какая кнопка нажата ява - PullRequest
       13

какая кнопка нажата ява

0 голосов
/ 06 февраля 2011

есть возможность распознать, когда btn нажата с уникальным eventListener?

я пробовал этот код, но не работал

 ActionListener one = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if (gr1.getCounter1() < 5) {
                        gr1.setCounter1(gr1.getCounter1() + 1);
                        if (arraybtn[1].isSelected())
                            test1.setIcon(play1a);
                        if (arraybtn[2].isSelected())
                            test1.setIcon(play1b);
                        if (arraybtn[3].isSelected())
                            test1.setIcon(play1c);
                        if (arraybtn[4].isSelected())
                            test1.setIcon(play1d);
                        if (arraybtn[5].isSelected())
                            test1.setIcon(play1e);
                    } else {
                        pn5.setText("No more cards");
                    }
                }
            };

спасибо,!

Ответы [ 2 ]

5 голосов
/ 06 февраля 2011

используйте метод getSource из объекта ActionEvent.

Ваш код будет выглядеть следующим образом:

if (e.getSource() == arraybtn[1])
   test1.setIcon(play1a);
if (e.getSource() == arraybtn[2])
   test1.setIcon(play1b);
if (e.getSource() == arraybtn[3])
   test1.setIcon(play1c);
if (e.getSource() == arraybtn[4])
   test1.setIcon(play1d);
if (e.getSource() == arraybtn[5])
   test1.setIcon(play1e);

, чтобы получить источник события (т.е. кнопку, которая быланажата).

http://download.oracle.com/javase/1.4.2/docs/api/java/util/EventObject.html#getSource()

1 голос
/ 06 февраля 2011

Ваш код выше нуждается в рефакторинге. Например, у вас есть массив JButtons, а не похожий массив ImageIcons, тогда вы можете избавиться от всех этих блоков if.

Например:

  ActionListener one = new ActionListener() {
     public void actionPerformed(ActionEvent e) {
        if (gr1.getCounter1() < 5) {
           gr1.setCounter1(gr1.getCounter1() + 1);
           for (int i = 0; i < arraybtn.length; i++) {
              if (arraybtn[i] == e.getSource()) {
                 test1.setIcon(play1Icons[i]);
              }
           }
        } else {
           pn5.setText("No more cards");
        }
     }
  };

И не забывайте мои рекомендации в другой ветке о дальнейшем рефакторинге, включая создание класса Player, класса Card, класса Deck, GameManager и т. Д.

Относительно вашего вопроса: «в этом скрипте у меня есть play1a = hand.get (1) .getImage (); если я делаю с другим массивом, таким как test1.setIcon (play1Icons [i]); ? "

Является ли рука ArrayList? Один из способов решить эту проблему - сделать что-то вроде

test1.setIcon(hand.get(i).getImage()); 

или какой-то другой вариант.

...