【问题标题】:How to check the state of an JCheckBox?如何检查 JCheckBox 的状态?
【发布时间】:2018-01-06 05:36:04
【问题描述】:

我想使用player.mute() 987654324 @检查jcheckbox mutemusic_box。 如果未选中且 player 已静音,则应执行命令 player.mute()。如何让这个工作?我的代码目前不起作用(可能是由于 ActionEvent)。

检查是否检查在actionPerformed中。

private JCheckBox pwremember_box, mutemusic_checkbox;

//GUI setup

public void actionPerformed(ActionEvent ae) {

    if (mutemusic_checkbox.isSelected()) {
        System.out.println("Muted!");
        player.mute();
    }
    else {
      System.out.println("Unmuted!");
      player.mute();
    } 
}

【问题讨论】:

  • 我是 Java 新手。随时发表评论,这样我就可以提高我的提问技巧。可能问题出在 ActionEvent 中。
  • 您必须将addActionListener(包含actionPerformed)添加到您的复选框中,否则GUI 将不会知道应该调用actionPerformed
  • 你能把这个作为答案发布吗?我不知道如何完成这项工作。
  • 参见 Oracle 的教程 How to Use Buttons, Check Boxes, and Radio Buttons,这些对于学习基础知识以及如何使用类非常有用。并且在右边至少有一些可以提供帮助的链接(在 Linked 下)==>

标签: java


【解决方案1】:

首先这个检查不是必需的:

if (ae.getSource().equals(mutemusic_box)) {

ActionListener 应与JCheckBox 按钮相关联。
所以,没有任何歧义。

然后为了知道复选框是否被选中,只需使用设计用于的 isSelected() 方法。

除了mute() 不是切换Player 声音的好命名方法。
toggleSound() 可能更有意义。

正如我在评论中所解释的,您必须首先将侦听器附加到 JCheckBox。

这是一个示例代码:

checkBoxMute.addActionListener(
   new ActionListener(){
        public void actionPerformed(ActionEvent ae) {   
          if (checkBoxMute.isSelected()) {
              System.out.println("Muted!");
              player.toggleSound();
          }
          else {
              System.out.println("Unmuted!");
              player.toggleSound();
          } 
       }
   });

这里用 lambda 做同样的事情,而不是创建 ActionListener 的匿名类:

checkBoxMute.addActionListener(
    ae -> {
        if (checkBoxMute.isSelected()) {
          System.out.println("Muted!");
          player.toggleSound();
        } else {
          System.out.println("Unmuted!");
          player.toggleSound();
        }
    });
}

【讨论】:

  • 感谢您重命名它的想法。我试过了,但控制台没有打印任何内容,声音也没有静音。有什么想法吗?
  • 不客气。您确定已将 ActionListener 附加到您选择/取消选择的复选框吗?
  • 是的。我将更新我的代码并展示mutemusic_checkbox 的外观。
  • 它没有附加到。我更新了。这很简单。
  • @realKSMC 您无法编辑答案以添加自己的答案。如果您认为添加代码有意义,请添加答案:)
【解决方案2】:

你可以试试

mutemusic_box.isSelected();

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案3】:

你可以使用isSelected方法。

boolean isChecked = mutemusic_box.isSelected();

作为个人建议,将 mutemusic_box 重命名为 muteMusicCheckBox 或类似名称。

【讨论】:

  • 具体在哪里使用? :) 感谢您的快速响应!
  • 一旦你引用了JCheckBox,你就可以在这个对象上调用它。
  • 你能举个例子吗?我是 Java 新手 ;)
  • @realKSMC 你在这里
  • 注意到您的更新答案 :) 我将更改名称,谢谢。我会尝试一下并做出回应。