我正在编写一个日历面板以在应用程序中使用。为了显示我使用JButton的日子。由于我不希望按钮占用大量空间,因此它们没有插入物。
以下是我在GTK +中的表现:
所有按钮都显示得很干净。
现在,我切换到Metal laf时的情况如下:
简单地说,这是不可接受的。
当我通过将setMargins(new insets(0,0,0,0))
放在自定义按钮的构造函数中来设置insets时,一切正常,看起来我希望它看起来像。
现在这些按钮不是唯一受到影响的按钮,我不觉得我应该手动设置这个按钮,所以我需要一个更清洁的解决方案。
我已经尝试通过UIManager.put("Button.margin", new Insets(0, 0, 0, 0));
设置默认按钮边距,但这并没有影响任何内容。
这让我疯了,我不知道这会如何影响Aqua或Windows laf等其他lafs,但我担心最坏的情况。
编辑:
刚在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();
}
}
答案 0 :(得分:3)
好吧,我解决了我的问题,当然它实际上非常简单,这里来了。
我在日历面板中使用的按钮是JToggleButton
个。 “Button.margin”仅适用于JButton
。所以我需要做的就是添加1行:
UIManager.put("ToggleButton.margin", new Insets(0, 0, 0, 0));
您可以在UIManager
{{1}}找到可以设置的项目列表。{/ p>