I would like to reduce the vertical size of a JButton. The following code works fine for K > 1 but I can't seem to reduce the size. Any suggestions?
JButton button = /* ... get button here ... */
Dimension d = button.getPreferredSize();
d.setSize(d.getWidth(), d.getHeight()*K);
button.setPreferredSize(d);
edit: I'm using JavaBuilders + MigLayout. It looks like I have to do button.setMaxSize(d);
instead of setPreferredSize(), not sure开发者_如何转开发 why.
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
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.
Maybe just play with the Border of the button:
Insets insets = button.getInsets();
insets.top = 0;
insets.bottom = 0;
button.setMargin( insets );
精彩评论