2

我正在编写一个日历面板以在应用程序中使用。为了显示天数,我使用 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();
    }
}
4

1 回答 1

2

好吧,我解决了我的问题,当然它实际上很简单,它来了。
我在日历面板中使用的按钮是JToggleButtons。“Button.margin”仅适用于JButtons。所以我需要做的就是添加 1 行:
UIManager.put("ToggleButton.margin", new Insets(0, 0, 0, 0));

可以在此处UIManager找到您可以在其中设置的项目列表。

于 2011-12-01T20:26:45.317 回答