即使将Border设置为EmptyBorder,JButton的边框也不会消失

时间:2011-10-05 11:28:33

标签: java swing user-interface jbutton imageicon

我正在Mac上使用Eclipse设计GUI,我想让JButton只显示我设置的Icon。它在Mac OS上看起来很好,但是当我将它导出到jar文件并在Windows操作系统中输入时,JButton看起来像这样:

enter image description here

边框全部为EmptyBorder

我做错了什么?我怎样才能让后面的广场消失?

2 个答案:

答案 0 :(得分:10)

要正确回答此问题,最有可能需要SSCCE。无论如何,我相信您会想要在JButton个实例上调用setContentAreaFilled(false)。这应该有效地删除“方块”。

然而,重要的是要注意,调用此函数的确切行为在逐个组件和L& F-by-L& F的基础上变化。


import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public final class JButtonDemo {
    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                createAndShowGUI();             
            }
        });
    }

    private static void createAndShowGUI(){
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JIconButton());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private static final class JIconButton extends JButton{
        private static final long serialVersionUID = 7274140930080397481L;

        public JIconButton(){
            super(UIManager.getIcon("OptionPane.informationIcon"));
            setContentAreaFilled(false);
            setFocusPainted(false);
            setBorder(BorderFactory.createEmptyBorder());
        }
    }
}

enter image description here

答案 1 :(得分:2)

1)不能重现那个,如果没有看到你为此写的代码就太难说了,

2)因为你触及了XxxButtonUI,这实际上是Native OS相关的问题,看上去用的是那个

3)如果覆盖MetalButtonUI会发生什么?

4)有transulcent背景,或有一些颜色,或......