所以,我有一个很小的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尝试调整每个组件的宽度与容器的宽度之比(减去小图)。如果组件的最大尺寸小于宽度
因此,您可以设置maximumSize
和preferredSize
以获得所需的大小。
loadButton.setMaximumSize(buttonDimension);
loadButton.setPreferredSize(buttonDimension);