【问题标题】:Card Layout and toggle button problems卡片布局和切换按钮问题
【发布时间】:2016-04-21 02:48:03
【问题描述】:

我在使用卡片布局和切换按钮时遇到问题。 例如,我想在按下时更改背景按钮:

private void togglebtnActionPerformed(java.awt.event.ActionEvent evt){
    if(togglebtn.isSelected()){
       togglebtn.setBackground(Color.green);}
    else{
       togglebtn.setBackground(Color.red);}
}

把这个togglebtn 放在一个普通的JFrame 上就可以了。如果我使用带有 CardLayout 的面板并将此 togglebtn 放在带有 CardLayout 的面板上,它将不起作用。

private void cbItemStateChanged(java.awt.event.ItemEvent evt){ //cb is the combobox i use to switch the two panels
    CardLayout  cl = (CardLayout) (displaypane.getLayout()); //displaypane is the panel in which i used the CardLayout
    if (cb.getSelectedIndex() == 0){
        cl.show(displaypane, "card1"); //card1 is the first panel in displaypane
    } else {
        cl.show(displaypane, "card2"); //card2 is the second panel in displaypane
    }
}

现在,如果我使用之前使用的相同代码,它就不起作用了:

private void togglebtnActionPerformed(java.awt.event.ActionEvent evt){ //the toggle button is in card1
    if(togglebtn.isSelected()){
       togglebtn.setBackground(Color.green);}
    else{
       togglebtn.setBackground(Color.red);}
}

它只显示红色背景而不显示绿色背景,因此无法选择切换按钮。 CardLayout 有什么区别?

【问题讨论】:

标签: java togglebutton cardlayout


【解决方案1】:

我无法在此处解释您对CardLayout 的问题。事实上,我也无法使用简单的JFrame 来使用它。
但是,如果您想更改按钮的背景颜色,则需要使用以下命令对其进行初始化:

togglebtn.setContentAreaFilled(false);
togglebtn.setOpaque(true);

使其不透明并移除内容区域的填充可确保您的用户界面外观不会过度绘制您定义的背景颜色。

【讨论】:

  • 如果我尝试在没有 CardLayout 的情况下更改 JFrame 中切换按钮的颜色,则切换按钮在按下时会更改其背景,因为它已被选中。
  • 但是,如果我尝试使用 CardLayout 更改 JFrame 中切换按钮的颜色,则切换按钮在按下时不会更改其背景,因为它没有被选中。为什么?
  • 我认为我们需要您提供更多代码,因为这应该可以工作。我为CardLayout 使用了this 示例代码,并使用我提到的方法和您的ActionPerformed 方法添加了JToggleButton,它的行为符合预期。
  • 这是所有程序,除了主要代码。我用的是 Netbeans,所以程序大大减少了,但和你的一样。
  • 这里的“主要代码”似乎很重要。请添加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
  • 2016-10-24
  • 2017-06-10
  • 2016-05-16
  • 1970-01-01
相关资源
最近更新 更多