在Java Swing中更改JButton的边框颜色并保留插图。

3
我希望能够在Java Swing中更改JButton组件的边框颜色。
我尝试了以下方法:
package com.example.test;

import java.awt.Color;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test extends JFrame {

    public Test() {

        JPanel panel = new JPanel();
        JButton button1 = new JButton("Test Button 1");
        JButton button2 = new JButton("Test Button 2");
        button2.setBorder(BorderFactory.createLineBorder(Color.RED));

        panel.add(button1);
        panel.add(button2);

        this.add(panel);


        setSize(400, 400);
        setVisible(true);

    }

    public static void main(String[] args) {

        try {
            UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName() );
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnsupportedLookAndFeelException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        }
        Test t = new Test();
    }
}

这会生成两个按钮,我尝试在button2组件上更改边框颜色,但它会移除填充。有没有办法保留标准JButton的原始插入并只更改颜色?
注意:我假设在分配新边框时删除了插入。但我不确定。

JButton Change Border Color

1个回答

5

使用CompoundBorder而非创建一个LineBorder

button2.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createLineBorder(Color.RED, 1), 
            BorderFactory.createEmptyBorder(
                button1.getBorder().getBorderInsets(button1).top, 
                button1.getBorder().getBorderInsets(button1).left, 
                button1.getBorder().getBorderInsets(button1).bottom, 
                button1.getBorder().getBorderInsets(button1).right)));

我拿了button1BorderInsets,这样两个按钮就有相同的大小。
我的答案基于@MadProgrammer对这个问题的回答。 enter image description here Btw不要继承JFrame,而是创建它的实例。如果你真的需要扩展组件,比如一个JPanel: Extends JFrame vs. creating it inside the program 此外,不要忘记调用。
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

在你的JFrame实例上,这样当你关闭它时,程序就会终止。

另外,你忘了将程序放置在EDT上,请参阅此答案了解更多细节。


1
感谢您的回答和附带的评论/建议。这很有帮助。 - M.E.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接