所以,我有一个很小的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);
}
}
答案 0 :(得分:1)
您需要Box.createVerticalGlue()
更改
add(changeButton);
add(Box.createRigidArea(spaceDimension));
与
add(changeButton);
add(Box.createVerticalGlue());
然后您可以使用.setPreferredSize(new Dimension(x,y));
按钮将适应您的布局
答案 1 :(得分:0)
当BoxLayout从上到下布置组件时,它会尝试 在组件的首选高度中确定每个组件的大小。
对于从上到下的框布局,容器的首选宽度 是儿童的最大首选宽度。如果 容器被迫比那更宽, BoxLayout试图调整大小 每个组件的宽度与容器宽度的宽度(减去 插图)即可。如果组件的最大大小小于宽度 容器,然后X对齐发挥作用。
因此,您可以同时设置preferredSize
和 loadButton.setMaximumSize(buttonDimension);
loadButton.setPreferredSize(buttonDimension);
以获得所需的尺寸。
public App()
{
BlobCache.ApplicationName = "MyApp";
BlobCache.EnsureInitialized();
// The root page of your application
MainPage = GetMainPage();
}
public object BlockingGetExternalUser()
{
return GetExternalUser().Result;
}
private async Task<object> GetExternalUser()
{
try
{
return await BlobCache.LocalMachine.GetObject<object>("user");
}
catch (KeyNotFoundException)
{
return null;
}
}