java swing中的JToggleButton无法识别isSelected()方法?

时间:2016-11-25 19:38:47

标签: java swing jtogglebutton

我试图在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的派生类。出于某种原因,当我点击按钮时,它不会变为红色(它变成默认的灰色),但是当我再次点击它时它会变成黄色。所以它似乎是真实的'或者' on'按钮的状态不起作用,但是“假”'是。我不知道为什么isSelected()没有正常运行。

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

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

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);
    }
}   

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

1 个答案:

答案 0 :(得分:2)

当选择切换按钮时,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);