java swing 中的 JToggleButton 无法识别 isSelected() 方法?
JToggleButton in java swing not recognizing isSelected() method?
我正在尝试在 java swing 中创建一个图形用户界面,让用户可以使用切换按钮预订座位。我最初使用默认按钮颜色来测试点击事件是否有效。该按钮应变为红色表示已预订,变为黄色表示未预订。
这是我的 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 的派生 class。出于某种原因,当我单击该按钮时,它不会变成红色(它变成默认的灰色),但是当我再次单击它时它会变成黄色。因此按钮的 'true' 或 'on' 状态似乎不起作用,但 'false' 状态正常。我不知道为什么 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);
}
}
这执行了我想要发生的事情,但我无法用我在上面发布的派生 class 重新创建它。我自己的代码有问题吗?
选择切换按钮时,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);
我正在尝试在 java swing 中创建一个图形用户界面,让用户可以使用切换按钮预订座位。我最初使用默认按钮颜色来测试点击事件是否有效。该按钮应变为红色表示已预订,变为黄色表示未预订。
这是我的 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 的派生 class。出于某种原因,当我单击该按钮时,它不会变成红色(它变成默认的灰色),但是当我再次单击它时它会变成黄色。因此按钮的 'true' 或 'on' 状态似乎不起作用,但 'false' 状态正常。我不知道为什么 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);
}
}
这执行了我想要发生的事情,但我无法用我在上面发布的派生 class 重新创建它。我自己的代码有问题吗?
选择切换按钮时,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);