【问题标题】:JToggleButton in java swing not recognizing isSelected() method?java swing中的JToggleButton无法识别isSelected()方法?
【发布时间】:2016-11-25 19:38:47
【问题描述】:

我正在尝试在 java swing 中创建一个 gui,让用户使用切换按钮预订座位。我最初使用默认按钮颜色来测试单击事件是否有效。该按钮应变为红色表示已预订,变为黄色表示已取消预订。

这是我的 actionPerformed 方法

@Override
public void actionPerformed(ActionEvent e) {
    GoldSeat seat = (GoldSeat)e.getSource();
    if(seat.isSelected()){
        seat.setBackground(Color.red);
    }
    else
    {
        seat.setBackground(Color.yellow);
    }
}

GoldSeat 只是 JToggleButton 的派生类。出于某种原因,当我单击该按钮时,它不会变成红色(它会变成默认的灰色),但是当我再次单击它时,它会变成黄色。所以看起来按钮的“真”或“开”状态不起作用,但“假”是。我不知道为什么 isSelected() 不能正常工作。

知道如何解决这个问题吗?

编辑:我使用生成此代码的 Netbeans 的简单拖放界面将一个带有一个 JToggleButton 的快速 JFrame 放在一起:

jToggleButton1 = new javax.swing.JToggleButton();
 jToggleButton1.setText("jToggleButton1");
    jToggleButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jToggleButton1ActionPerformed(evt);
        }
    });

以及动作事件:

private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                               
    if(jToggleButton1.isSelected()){
        jToggleButton1.setBackground(Color.red);
    }else {
        jToggleButton1.setBackground(Color.yellow);
    }
}   

这执行了我想要发生的事情,但我无法使用上面发布的派生类重新创建它。我自己的代码做错了吗?

【问题讨论】:

  • Am I doing something wrong with my own code? - 也许没有错,但不同。我已经建议这是一个 LAF 问题。也许这两个框架使用不同的 LAF?无论如何,根据几行随机代码,我们无法判断您做错了什么。

标签: java swing jtogglebutton


【解决方案1】:

选择切换按钮时LAF确实进行自定义绘画,因此设置背景没有效果。

您也许可以使用UIManager 来控制此行为。在创建任何切换按钮之前,您可以尝试:

UIManager.put("ToggleButton.select", Color.RED);

这将更改所有切换按钮的属性。

编辑:

如果您只希望此功能用于单个切换按钮,您可以尝试(不确定它是否有效):

Color select = UIManager.getColor("ToggleButton.select");
UIManager.put("ToggleButton.select", Color.RED);
JToggleButton button = new JToggleButton(...);
UIManager.put("ToggleButton.select", select);

【讨论】:

  • 我真的需要它来处理单个按钮。我制作了一个带有一个 JToggleButton 的快速 JFrame,并设法让它按照我的意愿在那里工作,但由于某种原因,它在我的主代码中不起作用。编辑:刚刚看到你的编辑。我会试试看效果如何
  • @MarkO'Hare,见编辑。如果您有更多问题,请发布您的minimal reproducible example,展示您尝试过的内容。
  • 该解决方案最终对我有用!感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多