Java Hangman项目:动作监听器

new*_*bie 4 java swing code-generation actionlistener

我正在创建一个刽子手游戏.我使用Netbeans中的GUI工具栏创建了一个按钮A - Z,如下所示:在此输入图像描述

我的问题是,如何为所有这些添加actionlistener.是否可以使用循环?如果我单击按钮A,我将得到字符'a',依此类推.

Hov*_*els 5

是的,可以使用循环,但由于您的JButton是使用NetBeans代码生成创建的,因此它们最初不会在数组或集合中,因此您必须执行以下操作:创建数组JButton并使用NetBeans创建的按钮填充它.然后创建一个for循环并在该循环中添加一个ActionListener,它在其逻辑中使用ActionEvent的actionCommand(如上所述),这是一个微不足道的事情.

话虽如此,我认为更好的解决方案是放弃使用NetBean的GUI构建器(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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1,但由于所有按钮的操作相同,因此您只需创建一个ActionListener.应该在循环外创建监听器,然后将其添加到循环内的按钮. (2认同)