您好,我现在正在制作一个简单的游戏,当您在播放屏幕上时,您可以按 esc 打开菜单。有一个主菜单按钮可将您从播放屏幕带到主菜单屏幕,问题是它会将它们带到主菜单屏幕,然后单击与游戏相同的主屏幕上的按钮菜单,因此它会在您释放按钮之前单击主菜单上的按钮。这是我的一些课程
这是我的菜单类(主屏幕)http://pastebin.com/kc5Dx2bp
这是我的游戏课(游戏画面)http://pastebin.com/Gr3y9Amj
有没有办法让它在释放鼠标按钮之前不能单击另一个按钮?
您好,我现在正在制作一个简单的游戏,当您在播放屏幕上时,您可以按 esc 打开菜单。有一个主菜单按钮可将您从播放屏幕带到主菜单屏幕,问题是它会将它们带到主菜单屏幕,然后单击与游戏相同的主屏幕上的按钮菜单,因此它会在您释放按钮之前单击主菜单上的按钮。这是我的一些课程
这是我的菜单类(主屏幕)http://pastebin.com/kc5Dx2bp
这是我的游戏课(游戏画面)http://pastebin.com/Gr3y9Amj
有没有办法让它在释放鼠标按钮之前不能单击另一个按钮?
基本上,您可以使用ButtonModel
来跟踪按钮状态的更精细更改,然后ActionListener
为您提供。
此示例监控模型的状态armed
和pressed
状态,并根据特定条件采取行动。
这是一个小技巧,因为您正在寻找的状态不仅会在释放按钮时出现,而且会在第一次按下按钮时出现。我们所做的是等到之前的状态是按下按钮并且按钮pressed
状态是false
,然后我们知道我们有一个按钮释放
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.ButtonModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class TestButton05 {
public static void main(String[] args) {
new TestButton05();
}
public TestButton05() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
final JButton btn = new JButton("Clicked");
btn.getModel().addChangeListener(new ChangeListener() {
private boolean wasPressed = false;
@Override
public void stateChanged(ChangeEvent e) {
ButtonModel model = (ButtonModel) e.getSource();
if (model.isArmed() && !model.isPressed() && wasPressed) {
System.out.println("Released");
} else {
wasPressed = model.isPressed();
}
}
});
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridBagLayout());
frame.add(btn);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
类似的东西。