Java 更改JButton的颜色而不更改其形状

Java 更改JButton的颜色而不更改其形状,java,swing,Java,Swing,我想通过以下方式更改JButton的颜色: JButton button = new JButton(); button.setBackground(Color.decode("#00a5ff")); 为了进行更改,我必须补充: button.setOpaque(true); button.setBorderPainted(false); 但是,这会删除边缘周围的曲线,从而更改按钮的形状。有没有一种方法可以简单地改变颜色并保留其他属性?另一个例子是当你按下一个按钮而没有改变它的颜色时,颜色

我想通过以下方式更改JButton的颜色:

JButton button = new JButton();

button.setBackground(Color.decode("#00a5ff"));
为了进行更改,我必须补充:

button.setOpaque(true);
button.setBorderPainted(false);
但是,这会删除边缘周围的曲线,从而更改按钮的形状。有没有一种方法可以简单地改变颜色并保留其他属性?另一个例子是当你按下一个按钮而没有改变它的颜色时,颜色的改变(变暗)

下面是一些说明两个按钮之间差异的代码:

    public static void main(String[] args) {
    JFrame frame = new JFrame("frame");
    frame.setSize(new Dimension(300, 300));
    JButton button1 = new JButton();
    JButton button2 = new JButton();

    button1.setPreferredSize(new Dimension(100,100));
    button2.setPreferredSize(new Dimension(100,100));
    button2.setBackground(Color.decode("#00a5ff"));
    button2.setBorderPainted(false);
    button2.setOpaque(true);

    JPanel pane1 = new JPanel(new FlowLayout());
    JPanel pane2 = new JPanel(new FlowLayout());

    pane1.add(button1);
    pane2.add(button2);
    frame.add(pane1, BorderLayout.WEST);
    frame.add(pane2, BorderLayout.EAST);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

谢谢

也许您的代码中还有其他内容。我修改了一个小示例,使用常规按钮和JButton只改变了背景(颜色)。请参阅以下内容

public static void main(String[] args) {
    Frame frame = new Frame();
    Panel panel = new Panel();
    Button closeButton = new Button("Close");
    closeButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            frame.setVisible(false);
            frame.dispose();
        }           
    });
    closeButton.setBackground(Color.decode("#00a5ff"));
    panel.add(closeButton);
    frame.add(panel);
    frame.setSize(200, 100);
    frame.setLocation(200, 50);
    frame.setVisible(true);
}

我只是测试了以下内容:

JFrame frame = new JFrame("frame");
frame.setSize(new Dimension(300, 300));
JButton button = new JButton();

button.setBackground(Color.decode("#00a5ff"));
frame.add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

这似乎是可行的,但我正在Ubuntu Studio 16.04上工作。如果您注意到它不起作用,请告诉我。请显示白色按钮或失败按钮的结果(如果仍然不起作用)?

这只会创建一个白色(标准按钮),周围有蓝色边框。请注意,我使用的是Mac电脑。我有一个蓝色按钮,但我使用的是Win10。我复制了你添加的代码,也得到了蓝色按钮。问题是没有得到蓝色按钮。。。问题是按钮会变成正方形(而不是软边),按下按钮时不会变暗,就像不改变颜色时一样。大多数本地外观和感觉不是通过背景填充按钮,而是通过生成按钮“形状”的
contentAreaFilled
属性填充按钮,使
background
属性变得有些无用这不起作用,因为颜色不会改变。我用的是Mac电脑。为了改变颜色,我必须执行
button.setbOrderPaint(false)
删除按钮的平滑边和其他属性,使其成为具有该颜色的矩形。@程序员您知道如何仅更改颜色而不弄乱形状吗?我认为Netbeans能够在design studio中做到这一点,但是,需要哪些代码行?@Playdowin不,正如我所说,这是由L&F管理的,除非它提供一些“超级机密属性”(类似于Nimbus),否则几乎不可能做到do@MadProgrammer我写了一个例子来说明大多数情况下的差异,这是由look-and-feel委托控制的,它可能会也可能不会为您提供更改它的方法(我很确定Windows L&F不会-即使您扩展了实现,也都是通过私有功能完成的:P)