2011-11-29 97 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