Java/Swing: low-profile button height?
Solution 1:
A few options:
import java.awt.*;
public class FrameTest {
public static void main(String[] args) {
JFrame jf = new JFrame("Demo");
jf.getContentPane().setLayout(new FlowLayout());
// Ordinary button
jf.add(new JButton("button 1"));
// Smaller font
jf.add(new JButton("button 2") {{ setFont(getFont().deriveFont(7f)); }});
// Similar to your suggestion:
jf.add(new JButton("button 3") {{
Dimension d = getPreferredSize();
d.setSize(d.getWidth(), d.getHeight()*.5);
setPreferredSize(d);
}});
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.pack();
jf.setVisible(true);
}
}
Produces
Solution 2:
As an alternative, some L&Fs (e.g. Nimbus, Aqua) support a JComponent.sizeVariant
, as discussed in Resizing a Component and Using Client Properties. Several variations are illustrated here.
Solution 3:
Maybe just play with the Border of the button:
Insets insets = button.getInsets();
insets.top = 0;
insets.bottom = 0;
button.setMargin( insets );