2011-10-05 60 views
4

我正在Mac上使用Eclipse设计GUI,并且我想让JButton仅显示我设置的图标。它看起来罚款在Mac OS上,但是当我将它导出到一个jar文件,并在车辙在Windows操作系统中,JButton看起来是这样的:即使将边框设置为EmptyBorder,JButton的边框也不会消失

enter image description here

边框都EmptyBorder

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

+0

听起来像一个L&F的问题。可能这两个操作系统对您使用的文件格式中的透明像素有不同的解释(尽管这对我来说似乎不太可能)。你使用什么文件格式?另外,如果您可以制作[scce](http://sscce.org/),则可能会有所帮助。 –

+0

@Xiaofan Wu只是确保我们JButton的状态来自Windows或MAC操作系统 – mKorbel

回答

10

要正确地回答这个问题,一个SSCCE将最有可能是必需的。无论如何,我相信你会想在你的JButton实例上调用setContentAreaFilled(false)。这应该有效地消除“广场”。

但是,需要注意的是,调用此功能的确切行为因组件而异,并且基于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

+1工作于'com.apple.laf.AquaLookAndFeel',但武装和按下的UI提示消失;为了好玩,尝试添加'this.setPressedIcon(UIManager.getIcon(“OptionPane.warningIcon”))''。 – trashgod

+0

@mre:setContentAreaFilled(false)有效!但我没有写我自己的JButton类,我只是喜欢okButton.setContentAreaFilled(false);等等。有用! – xiaofan2406

2

1)无法重现,太硬没有看到你为写代码的说,

2),因为你感动XxxButtonUI,这真是本机OS rellated问题,其外观和风格是否有用于此

3)如果你重写MetalButtonUI会发生什么?

4)有transulcent背景,或者与某些颜色,或者......