分析一下这段代码oneButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { player = 1; } }); twoButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { player = 2; } }); threeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { player = 3; } });
这段代码是为三个按钮(oneButton、twoButton、threeButton)添加 Action 监听器,当用户点击按钮时,对应的 player 变量会被设置为相应的值(1、2、3)。具体来说,这里使用了匿名内部类 ActionListener 来实现监听器,重写了 actionPerformed 方法,在方法中设置 player 变量的值。这种方式可以避免创建多个类,使代码更加简洁。
分析一下这段代码:contentPanel.setLayout(new FlowLayout()); contentPanel.add(new JLabel("火柴数量:")); contentPanel.add(matchesLabel); contentPanel.add(oneButton); contentPanel.add(twoButton); contentPanel.add(threeButton); contentPanel.add(confirmButton); add(scrollPane, BorderLayout.CENTER); add(contentPanel, BorderLayout.SOUTH); matchesLabel.setText(String.valueOf(matchesNum)); player = computer = 0; showInfo("游戏开始!"+"\n"); oneButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { player = 1; } }); twoButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { player = 2; } }); threeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { player = 3; } });
这段代码实现了界面的布局和一些初始化操作。首先通过 contentPanel.setLayout(new FlowLayout())
指定了内容面板的布局为 FlowLayout
。然后将一些组件添加到内容面板中,包括一个标签、一个文本框、三个按钮和一个确认按钮。其中 matchesLabel
是一个文本框,用于显示当前火柴数量;oneButton
、twoButton
和 threeButton
分别表示玩家每次可以取走的火柴数量;confirmButton
用于确认玩家的选择。scrollPane
和 contentPanel
分别被添加到了主窗口的中心和南部。
接下来进行一些初始化操作,包括将 matchesLabel
的文本内容设置为 matchesNum
,将 player
和 computer
的值都初始化为 0
,并在界面上显示一条游戏开始的提示信息。
最后,为三个按钮分别添加了监听器,当玩家点击按钮时,对应的 player
变量会被设置为相应的值(1、2、3)。
Arduino 用OneButton.h库写按键长按短按
使用 OneButton.h 库可以很方便地实现按键的长按和短按功能。下面是一个简单的示例代码,演示了如何使用该库来检测按键的状态:
#include <OneButton.h>
// 定义按键引脚
#define BUTTON_PIN 2
// 创建一个 OneButton 对象
OneButton button(BUTTON_PIN, true);
void setup() {
// 初始化串口
Serial.begin(9600);
// 设置按键长按和短按的时间阈值(单位为毫秒)
button.setClickTicks(100);
button.setPressTicks(1000);
// 绑定按键短按和长按的回调函数
button.attachClick(clickHandler);
button.attachLongPressStart(longPressStartHandler);
button.attachLongPressStop(longPressStopHandler);
}
void loop() {
// 处理按键事件
button.tick();
}
// 按键短按的回调函数
void clickHandler() {
Serial.println("Short press detected.");
}
// 按键长按开始的回调函数
void longPressStartHandler() {
Serial.println("Long press started.");
}
// 按键长按结束的回调函数
void longPressStopHandler() {
Serial.println("Long press stopped.");
}
在上面的代码中,我们首先定义了按键的引脚。然后创建了一个 OneButton 的对象,并设置了按键长按和短按的时间阈值。接着,我们绑定了按键短按和长按的回调函数,这些函数将在相应的事件发生时被调用。最后,在主循环中调用 button.tick()
处理按键事件即可。
需要注意的是,OneButton.h
库使用了 attachInterrupt()
函数来检测按键状态,因此在使用该库时需要根据实际情况选择正确的引脚。同时,由于 Arduino 的 loop()
函数是一个无限循环,因此需要使用 button.tick()
来驱动按键事件的处理。
相关推荐
















