Java / Swing: низкопрофильная высота кнопки? - PullRequest
3 голосов
/ 25 мая 2010

Я хотел бы уменьшить вертикальный размер JButton. Следующий код прекрасно работает для K> 1, но я не могу уменьшить его размер. Есть предложения?

JButton button = /* ... get button here ... */
Dimension d = button.getPreferredSize();
d.setSize(d.getWidth(), d.getHeight()*K);
button.setPreferredSize(d);

edit: Я использую JavaBuilders + MigLayout. Похоже, я должен сделать button.setMaxSize(d); вместо setPreferredSize (), не знаю почему.

Ответы [ 3 ]

5 голосов
/ 25 мая 2010

В качестве альтернативы, некоторые L & F (например, Nimbus , Aqua ) поддерживают JComponent.sizeVariant, как описано в Изменение размера компонента и Использование свойств клиента . Несколько вариантов проиллюстрированы здесь .

image

5 голосов
/ 25 мая 2010

Несколько вариантов:

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);
    }
}

Производит

enter image description here

4 голосов
/ 25 мая 2010

Может быть, просто играть с границей кнопки:

Insets insets = button.getInsets();
insets.top = 0;
insets.bottom = 0;
button.setMargin( insets );
...