Swing - 如何修改 JButton 的边框颜色?

Posted

技术标签:

【中文标题】Swing - 如何修改 JButton 的边框颜色?【英文标题】:Swing - How to modify the border color of a JButton? 【发布时间】:2021-03-21 22:21:35 【问题描述】:

如何修改JButton的边框颜色?

我想得到这样的东西:

但是我不能修改颜色,边框是黑色的:

如果我尝试添加 LineBorder 或任何其他边框,我无法删除内边框:

【问题讨论】:

不确定,您是否尝试覆盖 painBorder 方法? docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/… 请发布一些代码,向我们展示您所做的事情、您使用的外观和感觉等,因为如果我设置边框它会改变,则不会出现双边界 【参考方案1】:

我在下面尝试了一个示例,一切似乎都很好,除非您正在做不同的事情:

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;

public class TestApp 

    public TestApp() 
        createAndShowGui();
    

    public static void main(String[] args) 
        SwingUtilities.invokeLater(TestApp::new);
    

    private void createAndShowGui() 
        JFrame frame = new JFrame("TestApp");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setBorder(new EmptyBorder(20, 20, 20, 20));
        panel.setBackground(Color.WHITE);

        JButton button = new JButton("Primary");
        button.setOpaque(false);
        button.setBackground(null);
        button.setFocusPainted(false);
        button.setForeground(new Color(69, 143, 253));
        RoundedBorder blueLineBorder = new RoundedBorder(new Color(69, 143, 253), 10);
        Border emptyBorder = BorderFactory.createEmptyBorder(button.getBorder().getBorderInsets(button).top, button.getBorder().getBorderInsets(button).left, button.getBorder().getBorderInsets(button).bottom, button.getBorder().getBorderInsets(button).right);
        button.setBorder(BorderFactory.createCompoundBorder(blueLineBorder, emptyBorder));

        panel.add(button);

        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    

    private static class RoundedBorder implements Border 

        private int radius = 10;
        private Color color;

        private RoundedBorder(Color color, int radius) 
            this.color = color;
            this.radius = radius;
        

        @Override
        public Insets getBorderInsets(Component c) 
            return new Insets(this.radius + 1, this.radius + 1, this.radius + 1, this.radius + 1);
        

        @Override
        public boolean isBorderOpaque() 
            return true;
        

        @Override
        public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) 
            g.setColor(color);
            g.drawRoundRect(x, y, width - 1, height - 1, radius, radius);
        
    

【讨论】:

以上是关于Swing - 如何修改 JButton 的边框颜色?的主要内容,如果未能解决你的问题,请参考以下文章

Swing:如何在每个组件、JPanel、JButton 等上绘制动画?

如何让 Swing 将我自己的 HTMLEditorKit 用于 JLabel/JButton/等

Swing JButton:文本上方的图标

java swing怎样开发出漂亮的界面

如何创建带有菜单的 JButton?

Java Swing 在单击我要删除的 jpanel 中存在的 Jbutton 时删除 Jpanel