Проект Java Hangman: слушатель действий - PullRequest
4 голосов
/ 29 января 2011

Я создаю игру палача. Я сделал кнопку A - Z, используя панели инструментов GUI в Netbeans следующим образом: enter image description here

Моя проблема в том, как я могу добавить actionlistener для всего этого. Можно ли использовать цикл? Если я нажму кнопку A, я получу символ «а» и т. Д.

Ответы [ 3 ]

5 голосов
/ 29 января 2011

Да, можно использовать цикл, но так как ваши JButton были созданы с помощью генерации кода NetBeans, они изначально не будут находиться в массиве или коллекции, и поэтому вам придется сделать следующее:создайте массив JButton и заполните его кнопками, созданными NetBeans.Тогда создание тривиального цикла является тривиальным вопросом, и в этом цикле добавьте ActionListener, который использует actionCommand ActionEvent (как отмечено выше) в своей логике.использовать конструктор графического интерфейса пользователя NetBean (Matisse) и вместо этого создавать свой код Swing вручную.Это даст вам гораздо больший контроль над вашим кодом и гораздо лучшее понимание его.Например, если вы делаете это таким образом, то в цикле for вы можете создать свои кнопки, добавить слушателей и добавить кнопку в ее контейнер (JPanel).

например,

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;

public class Foo2 {
    public static void main(String[] args) {
        JPanel buttonContainer = new JPanel(new GridLayout(3, 9, 10, 10));
        List<JButton> letterButtons = new ArrayList<JButton>(); // *** may not even be necessary
        for (char buttonChar = 'A'; buttonChar <= 'Z'; buttonChar++) {
            String buttonText = String.valueOf(buttonChar);
            JButton letterButton = new JButton(buttonText);
            letterButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String actionCommand = e.getActionCommand();
                    System.out.println("actionCommand is: " + actionCommand);
                    // TODO fill in with your code
                }
            });

            buttonContainer.add(letterButton);
            letterButtons.add(letterButton);
        }

        JOptionPane.showMessageDialog(null, buttonContainer);
    }
}
3 голосов
/ 29 января 2011

Вам нужно будет добавить кнопки в какой-то список, чтобы вы могли их перебирать, Netbeans не делает этого за вас при генерации кнопок.

После этого просто выполните цикл для каждого цикла в списке, содержащем все кнопки. Чтобы получить значения символов, просто приведите соответствующее значение ascii , которое начинается с 97 для нижнего регистра a или 65 для верхнего регистра A:

int charNum = 97;
for(Button b : board) {
    char charVal = (char)charNum;
    charNum++;
    //add the action listener
}
3 голосов
/ 29 января 2011

Ну, с каким-то псевдокодом, разве это не сработает?

for(button in bord) {
    button.addActionListener(my_actionlistener);
}

Затем в вашем списке действий вы можете увидеть, какая кнопка была нажата

public void actionPerformed(ActionEvent e) {
    // button pressed
    if ("string".equals(e.getActionCommand()) {
         // do something 
    }
    // and so forth
}
...