Java doClick()和Simon:所有按钮将同时取消按下,而不是单独取消按下
嗨,我是新来的,所以如果我犯了错误,请容忍我 我正在为一个班级项目制作这个Java Simon Says游戏。它通过随机数生成器为每个序列#工作。我通过doClick()显示序列,但事先删除actionlisteners,然后添加它 问题是,在按下所有其他按钮之前,这些按钮不会解除待命或待命。我已经尝试使用thread.sleep在每个if…else语句之间设置一个延迟,但它只会被按住更长的时间。我已经尝试在try中通过repaint()、revalidate()和updateUI()更新gui。。。抓住线。睡觉,但那也不起作用 我意识到这个问题主要是表面上的,因为当我尝试实现setPressed或setArmed时,它说它没有被按下,但看起来很紧迫 下面是最简单的代码片段,没有thread.sleep或我以前在注释中的尝试Java doClick()和Simon:所有按钮将同时取消按下,而不是单独取消按下,java,swing,jbutton,actionlistener,Java,Swing,Jbutton,Actionlistener,嗨,我是新来的,所以如果我犯了错误,请容忍我 我正在为一个班级项目制作这个Java Simon Says游戏。它通过随机数生成器为每个序列#工作。我通过doClick()显示序列,但事先删除actionlisteners,然后添加它 问题是,在按下所有其他按钮之前,这些按钮不会解除待命或待命。我已经尝试使用thread.sleep在每个if…else语句之间设置一个延迟,但它只会被按住更长的时间。我已经尝试在try中通过repaint()、revalidate()和updateUI()更新gui
public void sequence2() //This is where the issue happens. The buttons won't unpress until every button has been pressed.
{
level.setText(" Level 2"); //Level indicator
Green.removeActionListener(Listener);
Red.removeActionListener(Listener);
Yellow.removeActionListener(Listener);
Blue.removeActionListener(Listener);
if(sequence1 == 1)
{
Green.doClick(300); //Programmatically clicks the button
}
else if(sequence1 == 2)
{
Red.doClick(300);
}
else if(sequence1 == 3)
{
Yellow.doClick(300);
}
else if(sequence1 == 4)
{
Blue.doClick(300);
}
if(sequence2 == 1)
{
Green.doClick(300);
}
else if(sequence2 == 2)
{
Red.doClick(300);
}
else if(sequence2 == 3)
{
Yellow.doClick(300);
}
else if(sequence2 == 4)
{
Blue.doClick(300);
}
Green.addActionListener(Listener);
Red.addActionListener(Listener);
Yellow.addActionListener(Listener);
Blue.addActionListener(Listener);
}
我对java非常陌生,因此我不擅长多线程处理或以这种方式处理事件调度线程。但如果这是唯一的解决办法,我需要更多的帮助
我在一个zip文件中有完整的代码,以前的尝试都被注释掉了,如果这样有帮助的话。
调用doClick()
可能是一个尴尬的选择,因为它在内部使用了。相反,请使用,这将允许您使用setSelected()
根据每个按钮的selected
状态控制每个按钮的外观。游戏中显示了一个完整的示例。在Swing的ActionListener
中,选择当前按钮及其注释,并增加序列
索引。播放完所有音符后,取消选择所有按钮
附录:你能展示一下你是如何实现定时器的吗 在大纲中,给出了适当的切换按钮列表:
private static final int MAX = 4;
List<JToggleButton> buttons = new ArrayList<JToggleButton>(MAX);
private int i;
切换按钮的项目侦听器应根据其状态更新按钮的外观:
@Override
public void itemStateChanged(ItemEvent e) {
JToggleButton b = (JToggleButton) e.getItem();
if (b.isSelected()) {
// change icon, color etc.
} else {
// restore icon, color etc.
}
}
你能展示一下你是如何实现计时器的吗?我有JToggleButtons,现在我知道了。我只需要让它不被选中,可悲的是,我画了一个空白。还感谢您提供播放声音的链接。我一直在尝试,你的帮助总体来说是非常好的。谢谢再次感谢您的回复!我已经实现了代码,我很好。对不起,我花了这么长时间才回复,刚刚回到课堂,所以事情变得很疯狂。再次感谢,请继续帮助像我这样的新手。我们对此表示感谢
@Override
public void itemStateChanged(ItemEvent e) {
JToggleButton b = (JToggleButton) e.getItem();
if (b.isSelected()) {
// change icon, color etc.
} else {
// restore icon, color etc.
}
}