【问题标题】:Setting Background of a Jbutton设置 Jbutton 的背景
【发布时间】:2010-04-11 17:20:23
【问题描述】:

我有 5 个 JButton:b1、b2、b3、b4、b5。 默认情况下,它们的颜色为灰色。 当我单击任何按钮时,该按钮的背景变为白色。 当我单击另一个按钮时,我希望之前单击的按钮将其背景更改为灰色,而这个新单击的按钮将其背景更改为白色。这是我写的代码:

int liveButton = 0; //holds the value of the button that is last clicked.
//0 indicates no button clicked (in the beginning)

private void ChangeInUsersList(int clickedButton) {
    switch(liveButton) {
        case 1 : b1.setBackground(Color.GRAY);
                 break;
        case 2 : b2.setBackground(Color.GRAY);
                 break;
        case 3 : b3.setBackground(Color.GRAY);
                 break;
        case 4 : b4.setBackground(Color.GRAY);
                 break;
        case 5 : b5.setBackground(Color.GRAY);
                 break;
        default: System.out.println("No button to change");
    }
    liveButton = clickedButton;// store the clicked button to change its
    //background later
}
private void b1ActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(1);
    b1.setBackground(new java.awt.Color(255,255,255));
}

private void b2ActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(2);
    b2.setBackground(new java.awt.Color(255,255,255));
}

private void b3ActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(3);
    b3.setBackground(new java.awt.Color(255,255,255));
}

private void b4ActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(4);
    b4.setBackground(new java.awt.Color(255,255,255));
}

private void b5ButtonActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(5);
    b5.setBackground(new java.awt.Color(255,255,255));
}

但是,它没有按预期工作。当我单击一个按钮时,它的背景确实变为白色。但是,如果我在那之后单击其他按钮,则前一个按钮的背景不会变为灰色。我尝试将 Color.GREY 替换为 new java.awt.Color(236,233,216) - RGB 表示灰色,但它仍然不起作用。

【问题讨论】:

  • 您是否试图模拟 ButtonGroup 的功能?例如只能选择/切换一个按钮?顺便说一句:用 java.awt.Color.white 替换新的 java.awt.Color(255,255,255)
  • 是的!但我没有意识到 ButtonGroup 存在。我认为按钮组仅用于单选按钮。

标签: java swing jbutton


【解决方案1】:

如果您确实需要为按钮着色,然后将颜色设置回原来的默认状态(系统灰色),请使用

button.setBackground(null);

这将删除任何以前的颜色设置。

(我有一个应用程序,我需要点击几个按钮,跟踪我点击了哪些按钮,然后当我执行一个功能时,我“取消点击”它们。我可以使用切换按钮,但是这个添加此功能的行更改比更改我的整个组件数组更容易。另外,UI“感觉”是正确的。)

【讨论】:

    【解决方案2】:

    请解释一下你到底想做什么。

    根据您所写的内容,我猜您试图一次只选择一个按钮。如果是这样,用 JToggleButtons 替换您的 JButtons 并将它们放在一个 ButtonGroup 中。 例如。 (伪代码):

    //[...]
    JToggleButton button2 = new JToggleButton(...)
    //[...]
    ButtonGroup group = new ButtonGroup();
    //[...]
    group.add(button2);
    //[...]
    

    如果你真的想改变按钮的背景颜色:

    private List<JButton> buttons;
    private JButton b1, b2, b3, b4, b5;
    private void initButtons()
    {
       buttons = new ArrayList<JButton>(5); // new List to "save" Buttons in
       buttons.add(b1 = new JButton());
       // etc etc ...
       buttons.add(b5 = new JButton());
    }
    
    public void setActiveButton(JButton button)
    {
       for(JButton b : buttons)
       {
          b.setBackgroundColor(Color.GREY);
       } 
       button.setBackgroundColor(Color.WHITE);
    }
    
    private void b1ActionPerformed(java.awt.event.ActionEvent evt) 
    {
       setActiveButton(b1);
       // or to be more "generic"
       // setActiveButton((JButton) evt.getSource());
    }
    

    【讨论】:

    • 是的,我一次只选择了一个按钮。我想要的是被点击的按钮被突出显示。
    【解决方案3】:

    我通过在声明“liveButton”变量后添加以下行来修复它:

    Color buttonColor = b1.getBackground();
    

    后来,在 ChangeInUsersList 函数中,我将“Color.GRAY”替换为 buttonColor。 它奏效了:)

    【讨论】:

      【解决方案4】:

      您的按钮上同时需要setBackground()setContentAreaFilled(false)setOpaque(true)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-22
        • 2016-03-03
        • 2013-08-12
        • 2017-04-05
        • 2011-01-06
        • 1970-01-01
        • 2019-07-07
        • 1970-01-01
        相关资源
        最近更新 更多