2011-10-05 74 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背景,或者與某些顏色,或者......