我正在为一个学校项目编写类似于Tetris的Java游戏。在游戏中,我有一个复选框可以打开/关闭音乐。
我的问题是,即使我将其设置为选中状态,该复选框也不会在我单击时被选中(不理解我的意思,不是之后,而是单击之前/同时)。
好的,在我首先初始化复选框的代码中,我将其设置为基于另一个类中提供的变量进行检查。
我尝试调试该复选框正在执行的所有操作,但没有得到我不知道的任何内容。
这是我初始化盒子的代码:
music_cbox = TexturesHandler.getCheckboxTemplate();
music_cbox.setName("Music");
music_cbox.addMouseListener(Retris.getButtonHandler());
music_cbox.setLocation(Retris.WIDTH / 2 - 25, 250);
// Setting it to checked based on the variable
if(!Retris.getAudioHandler().canPlay()) {
music_cbox.setIcon(TexturesHandler.getUncheckedCheckBoxStyle());
music_cbox.setSelected(false);
System.out.println("box not selected");
} else {
music_cbox.setIcon(TexturesHandler.getCheckedCheckBoxStyle());
music_cbox.setSelected(true);
System.out.println("box selected");
}
仅当您单击框时,canPlay变量才会更改:
if(box.isSelected()) {
Retris.getAudioHandler().canPlay(false);
Retris.getAudioHandler().stopMusic();
System.out.println("Music disabled");
box.setIcon(TexturesHandler.getUncheckedCheckBoxStyle());
break;
// (in a switch statement)
} else {
Retris.getAudioHandler().canPlay(true);
Retris.getAudioHandler().startMusic("Main_Menu.wav", "Main Menu", 0.1F);
System.out.println("Music enabled");
box.setIcon(TexturesHandler.getCheckedCheckBoxStyle());
break;
}
在设置新图标和所有图标之后,我还尝试了box.setSelected()
,但是以某种方式,当我第一次单击该框时,它会执行else
部分而不是if
部分。
答案 0 :(得分:0)
不确定这是否有帮助,但我注意到在初始化时,您调用music_cbox.setSelected(),但是在if语句中,您调用box.isSelected()
这些是同一盒子吗?可以解释为什么设置变量,然后再检查另一个变量。