我需要將一些JButton放在一個非常小的地方,問題是Nimbus LAF自動在它們周圍放置一些空間,結果按鈕看起來比實際小。如何擺脫Nimbus LAF按鈕周圍的空間?
在下面的示例程序中,我使用了一個具有0個水平和垂直間隙的FlowLayout,並且我預計這些按鈕之間沒有任何空間會緊緊坐在一起。如果我評論Nimbus LAF的設置,它們的行爲如預期。
import javax.swing.*;
import java.awt.FlowLayout;
public class NimbusSpace {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
buildGUI();
}
});
}
private static void buildGUI() {
try {
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
p.add(createButton("aa"));
p.add(createButton("bb"));
p.add(createButton("cc"));
f.add(p);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private static JButton createButton(String text) {
JButton b = new JButton(text);
// b.setBorder(null);
// b.setBorderPainted(false);
// b.setMargin(new Insets(0,0,0,0));
// b.putClientProperty("JComponent.sizeVariant", "large");
// b.putClientProperty("JComponent.sizeVariant", "mini");
// UIDefaults def = new UIDefaults();
// def.put("Button.contentMargins", new Insets(0,0,0,0));
// b.putClientProperty("Nimbus.Overrides", def);
return b;
}
}
正如你可以在createButton註釋掉的代碼看,我嘗試了不少東西,但他們沒有刪除按鈕周圍的空間。
編輯:根據評論中的討論,似乎不可能刪除按鈕的矩形邊緣和繪製的圓角矩形輪廓之間的空間。 Nimbus保留這兩個像素用於「聚焦高光」,如果不重新實現許多Nimbus功能,這可能無法更改。
所以我接受了guleryuz的把戲:如果按鈕位於重疊和負位置,他們可以看起來更大。在實踐中,這個想法似乎有效,但它不是一個很乾淨的解決方案,所以如果你知道一個更好(並且相當容易實現)的解決方案,請不要猶豫回答...
你的意思是按鈕應該像這個例子一樣? http://stackoverflow.com/questions/34782238/connect-link-buttons-graphically-together – hamena314
@ hamena314我的實際問題是,我在一個小地方有一些小按鈕,這個問題使他們看起來比他們小得多。我的例子只是爲了說明問題。你的例子看起來很有趣,但我希望有定期的Nimbus按鈕,只有更大的看。 – lbalazscs
「間距」是爲「焦點高光」留出空間 – MadProgrammer