插图不受尊重

时间:2011-11-29 18:14:46

标签: java swing gtk cross-platform insets

我正在编写一个日历面板以在应用程序中使用。为了显示我使用JButton的日子。由于我不希望按钮占用大量空间,因此它们没有插入物。

以下是我在GTK +中的表现:
enter image description here
所有按钮都显示得很干净。

现在,我切换到Metal laf时的情况如下:
enter image description here
简单地说,这是不可接受的。

当我通过将setMargins(new insets(0,0,0,0))放在自定义按钮的构造函数中来设置insets时,一切正常,看起来我希望它看起来像。
enter image description here

现在这些按钮不是唯一受到影响的按钮,我不觉得我应该手动设置这个按钮,所以我需要一个更清洁的解决方案。 我已经尝试通过UIManager.put("Button.margin", new Insets(0, 0, 0, 0));设置默认按钮边距,但这并没有影响任何内容。 这让我疯了,我不知道这会如何影响Aqua或Windows laf等其他lafs,但我担心最坏的情况。

编辑: 刚在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 个答案:

答案 0 :(得分:3)

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

您可以在UIManager {{1}}找到可以设置的项目列表。{/ p>