2011-11-29 99 views
2

我正在寫一個日曆面板在應用程序中使用。要顯示我使用JButtons的日子。由於我不希望按鈕佔用大量空間,因此它們沒有插入。插入不被尊重

這裏是如何看在我的GTK +:
enter image description here
所有按鈕都顯示非常乾淨。

現在這裏是東西怎麼看時,我切換到金屬LAF:
enter image description here
簡單地說,這是不能接受的。

當我通過將setMargins(new insets(0,0,0,0))放置在自定義按鈕的構造函數中來設置插圖時,所有的作品都看起來像我希望的樣子。
enter image description here

現在,這些按鈕不影響以負面方式唯一的按鈕,我不覺得我應該,所以我需要一個更清潔的解決方案手動設置這個比比皆是。 我試過通過UIManager.put("Button.margin", new Insets(0, 0, 0, 0));設置默認按鈕邊距,但這並沒有影響任何東西。 這使我瘋狂,我不知道這是如何影響其他lafs如Aqua或Windows laf,但我擔心最糟糕。

編輯: 只是測試它在Windows XP和猜測:
enter image description here

EDIT2:
的main()創建並顯示該幀。它有幾個組件,由initComponents()創建。 initComponents()由Netbeans創建,最後有一個pack()

public class MainForm 
    extends javax.swing.JFrame 
{ 
    public MainForm() 
    { 
     String os = System.getProperty("os.name").toLowerCase(); 
     String laf = null; 
     if (os.contains("win")) 
     { 
      laf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"; 
     } 
     else if (os.contains("nix") || os.contains("nux")) 
     { 
      laf = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"; 
     } 
     else if (os.contains("mac")) 
     { 
      laf = "com.sun.java.swing.plaf.motif.MotifLookAndFeel"; 
     } 
     try 
     { 
      UIManager.put("Button.margin", new Insets(0, 0, 0, 0)); 
      UIManager.setLookAndFeel(laf); 
      SwingUtilities.updateComponentTreeUI(this); 
      System.out.println(UIManager.getLookAndFeel().toString()); 
     } 
     catch (Exception ex) 
     { 
      System.out.println(ex.toString()); 
     } 
     initComponents(); 
    } 
} 
+1

使用UIManager設置Button.margin在XP上使用JDK6_7可以正常工作。發佈你的[SSCCE](http://www.sscce.org)來證明問題。 – camickr

+0

這不是一個SSCCE。 – camickr

+0

我刪除了我的帖子 – mKorbel

回答

2

好吧,我解決了我的問題,當然它實際上很簡單,它來了。
我在日曆面板中使用的按鈕是JToggleButton s。 「Button.margin」僅適用於JButton s。因此,所有我需要做的是添加1行:
UIManager.put("ToggleButton.margin", new Insets(0, 0, 0, 0));

你可以在UIManager設定項的列表可以發現here