JButton不会显示背景颜色

时间:2015-04-21 19:21:06

标签: java swing user-interface jbutton

所以我正在编写一个程序,我最终会希望JButton在按下时改变颜色。到目前为止,这是我的困境:

- 尽管切换了setOpaque()和setContentAreaFilled()的true / false,但我无法获得我目前设置的JButton来显示背景颜色。我希望能够在尝试添加ActionListener之前执行此操作。

- 我想使用类似于JToggleButton()的东西来改变颜色,但是我想用背景而不是图标来做这件事。

我正在使用Mac,我想知道它是否与默认按钮设置有关,但我不知道如何更改/覆盖这些设置。

我会发布截图,但不幸的是我的声誉还不够高。

这是我得到的一个例子:

import java.awt.*;
import javax.swing.*;

public class Example extends JFrame {

  public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        createAndShowGUI();
      }
    });
  }

  public static void createAndShowGUI() {

    JFrame main = new JFrame("Example");
    JPanel content = new JPanel();
    JButton button = new JButton("Press");

    button.setBackground(Color.orange);
    button.setContentAreaFilled(false);
    button.setOpaque(true);

    content.add(button);

    main.setContentPane(content);
    main.setVisible(true);
    main.setSize(40,60);
    main.setLocation(500, 200);
    main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

}

对于那些无法看到我正在谈论的人(可能在Windows或Linux平台上),按钮会出现,按钮后面的布局(不是边框或JPanel,只是一个小的)按钮周围的矩形颜色为指定的颜色。

提前感谢您的时间。

另外,我知道在ActionListener中,getSource()方法将返回与按钮关联的文本。有没有办法使用类似的东西来改变ActionListener内部按钮的颜色,或者这个想法只是一种冗余,可以用更简单的方式完成。

非常感谢。

3 个答案:

答案 0 :(得分:2)

我认为你想要在外观和感觉上玩一些东西。 试试

button.setUI(new MetalButtonUI());

或尝试使用其他一些支持背景颜色的按钮。

答案 1 :(得分:2)

  

我最终希望JButton在按下时改变颜色

here are two different waysnote JButton has an arrays of colors in UIManager

  • 覆盖来自ButtonModel的事件(ChangeListener或实现相同的方法,例如isPressed,isArmed in JButtons API),加速器对鼠标和KeyEvens(选择或focusInWindow)有效

  • 覆盖BasicsButtonUI(用于实际项目)

  

我正在使用mac,我想知道它是否与它有关   默认按钮设置,但我不知道如何更改/覆盖   这些

答案 2 :(得分:0)

我认为button.setOpaque(true);是不必要的。

删除它,或将其更改为:button.setOpaque(false);并查看发生了什么