所以我正在编写一个程序,我最终会希望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内部按钮的颜色,或者这个想法只是一种冗余,可以用更简单的方式完成。
非常感谢。
答案 0 :(得分:2)
我认为你想要在外观和感觉上玩一些东西。 试试
button.setUI(new MetalButtonUI());
或尝试使用其他一些支持背景颜色的按钮。
答案 1 :(得分:2)
我最终希望JButton在按下时改变颜色
here are two different ways(note 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);
并查看发生了什么