如何使用BoxLayout改变组件的高度



所以,我有一个很小的GUI程序,我决定使用BoxLayout从上到下显示组件。一切工作正常,但我不能改变我的JButtons的高度。我尝试了很多东西,如setPreferredSize(),但后来我有问题,宽度是不正确的,以及。使用setMaximumSize()设置宽度像我想要的,但高度仍然不改变。也许你们中的一些人可以帮助我:)谢谢

public class SimpleSkinViewer extends JPanel implements ActionListener{
    private final Dimension boxDimension = new Dimension(320, 320);
    private final Dimension buttonDimension = new Dimension(320, 60);
    private final Dimension spaceDimension = new Dimension(0, 5);
    private JLabel imagebox;
    private JButton loadButton;
    private JButton changeButton;
    private JButton downloadButton;
    public SimpleSkinViewer() {
        super();
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        imagebox = new JLabel("");
        imagebox.setIcon(new ImageIcon(loadImage("http://skins.minecraft.net/MinecraftSkins/AvarionDE.png")));
        loadButton = new JButton("Load Skin");
        changeButton = new JButton("Change Skin");
        downloadButton = new JButton("Download");
        //add listeners
        loadButton.addActionListener(this);
        changeButton.addActionListener(this);
        downloadButton.addActionListener(this);
        //dimensions
        imagebox.setMaximumSize(boxDimension);
        loadButton.setMaximumSize(buttonDimension);
        changeButton.setMaximumSize(buttonDimension);
        downloadButton.setMaximumSize(buttonDimension);
        add(imagebox);
        add(Box.createRigidArea(spaceDimension));
        add(loadButton);
        add(Box.createRigidArea(spaceDimension));
        add(changeButton);
        add(Box.createRigidArea(spaceDimension));
        add(downloadButton);
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
    }
    //and other stuff.....
    public static void main (String[] args) {
        JFrame frame = new JFrame("Avarion's Simple Skin Viewer");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(new SimpleSkinViewer());
        frame.setLocationRelativeTo(null);
        frame.pack();
        frame.setVisible(true);
    }
}

您需要Box.createVerticalGlue()

改变
 add(changeButton);
 add(Box.createRigidArea(spaceDimension));

 add(changeButton);
 add(Box.createVerticalGlue());

然后你可以使用.setPreferredSize(new Dimension(x,y));和按钮将适应你的布局

From docs for BoxLayout

当BoxLayout从上到下布局组件时,它会尝试在组件的首选高度设置每个组件的尺寸。

对于从上到下的盒子布局,是容器的首选宽度是子元素的最大首选宽度。如果BoxLayout尝试调整每个组件的宽度与容器的宽度之比(减去小图)。如果组件的最大尺寸小于宽度

因此,您可以设置maximumSizepreferredSize以获得所需的大小。

   loadButton.setMaximumSize(buttonDimension);
   loadButton.setPreferredSize(buttonDimension);

相关内容

  • 没有找到相关文章

最新更新