我正在编写一个日历面板以在应用程序中使用。为了显示天数,我使用 JButtons。因为我不希望按钮占用大量空间,所以它们没有插图。
下面是它在我的 GTK+ 中的外观:
所有按钮都显示得漂亮而干净。
现在这是我切换到 Metal laf 时的样子:
简单地说,这是不可接受的。
当我通过放入自定义按钮的构造函数来设置插图时,setMargins(new insets(0,0,0,0))
一切正常,看起来我希望它看起来。
现在,这些按钮并不是唯一受到负面影响的按钮,我觉得我不应该在任何地方手动设置它,所以我需要一个更清洁的解决方案。我试过设置默认按钮边距,UIManager.put("Button.margin", new Insets(0, 0, 0, 0));
但这并没有影响任何事情。这让我发疯,我不知道这会如何影响 Aqua 或 Windows laf 等其他 laf,但我担心最坏的情况。
编辑:刚刚在 Windows XP 中对其进行了测试,然后猜猜是什么:
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();
}
}