setMinimumSize()不适用于JButton

时间:2014-02-12 16:54:43

标签: java swing user-interface jbutton boxlayout

以下代码描述了一个在JPAnel中使用BoxLayout在Page Axis中实例化的按钮:

private class AddInputSetButton extends JButton {
        public AddInputSetButton() {
            super("+");
            setMinimumSize(new Dimension(100, 100));
            pack();
            addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    addInputGroup();
                }
            });
        }
    }

我尝试过setSize(),setPreferredSize()和setMinimumSize()无效,没有人调整按钮的大小。我仍然是Java GUI的新手,所以希望它很简单。

如何调整按钮的大小?

编辑:进一步检查后,setPreferredSize()会将包含按钮的JPanel的大小更改为正确的大小,但按钮的大小保持不变。

1 个答案:

答案 0 :(得分:0)

JButtons(和其他一些组件)在布局管理器中可能有点傻。布局管理器注意到您的按钮具有需要遵守的首选大小,因此它正在调整窗格以适应。但是你的JButton很乐意这样做(它认为是正确的),除非你真的强迫它考虑它应该的尺寸。

如果你手动调整按钮大小(不一定推荐),我会说你应该设置所有三个属性(最小,最大和首选)。最大值是关键 - 它强制按钮考虑其他两种尺寸。

这是一个应该有用的简单示例。

import java.awt.Dimension;
import javax.swing.*;

public class ButtonSizes {

    private static class AddInputSetButton extends JButton {
        Dimension d;
        public AddInputSetButton(int width, int height) {
            super("+");
            d = new Dimension(width, height);
            setMinimumSize(d);
            setMaximumSize(d);
            setPreferredSize(d);
        }

    }

    public static void main(String[] args) {
        Box buttons = Box.createVerticalBox();
        buttons.add(new AddInputSetButton(100,100));
        buttons.add(new AddInputSetButton(200,200));
        buttons.add(new AddInputSetButton(300,300));

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(buttons);
        frame.pack();
        frame.setVisible(true);
    }
}