Java Hangman 项目 : Action Listener

标签 java swing code-generation actionlistener

我正在制作刽子手游戏。我使用 Netbeans 中的 GUI 工具栏制作了一个按钮 A - Z,如下所示: enter image description here

我的问题是,如何为所有这些添加一个 Action 监听器。是否可以使用循环?如果我点击按钮 A,我将得到字符 'a' 等等。

最佳答案

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

话虽如此,我认为更好的解决方案是放弃使用 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);
    }
}

关于Java Hangman 项目 : Action Listener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4836975/

相关文章:

java - OutOfMemoryError 崩溃报告,无法找出导致崩溃的原因

java - SQL状态[99999];错误代码 [17004];无效的列类型 : 1111 With Spring SimpleJdbcCall

Java Swing动画重影问题

rest - Swagger codegen - api 和模型

java - 使用 JLayer(AKA JavaLayer)在 java 中分析 mp3 文件?

java - 如何使用Java获取全局 Activity 窗口的名称?

java - 游戏中不会出现文字?

java - 在Java中通过JFrame显示图像后打开终端窗口

php - 如何在无类 php 文件上使用 PHPUnit 骨架生成器?

code-generation - 是否可以在 Telosys 模板中调用专门创建的函数?