问题描述
我对JFrame如何垂直扩展JButton以匹配JFrame最小大小而不是水平匹配感到困惑。我希望它不会向任一方向延伸,并且知道为什么会延伸或不延伸。
import javax.swing.*;
import java.awt.*;
public class somestring {
public static void main(String []args){
JFrame frame = new JFrame();
Container content = frame.getContentPane();
content.setLayout(new BorderLayout());
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension max = toolkit.getScreenSize();
frame.setMinimumSize(new Dimension(1000,1000));
frame.setSize(max);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton s = new JButton("generate somestring");
s.setPreferredSize(new Dimension(400,400));
content.add(s,BorderLayout.WEST);
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
}
}
解决方法
我对JFrame如何垂直扩展JButton以匹配JFrame最小大小而不是水平匹配感到困惑。
content.setLayout(new BorderLayout());
...
content.add(s,BorderLayout.WEST);
该框架的内容窗格的默认布局管理器是BorderLayout
,因此不需要上述操作。
无论如何,它垂直延伸的原因是因为这是将组件添加到BorderLayout
时WEST
的规则。
在Layout Managers上的Swing教程中阅读本节。 BorderLayout
的部分将说明向WEST
添加组件的规则。
我希望它不会向任一方向延伸
然后,您需要使用其他布局管理器。
例如,您可以使用FlowLayout
。该按钮将在框架顶部居中。
或者您可以使用GridBagLayout
(带有默认的GridBagConstraints)。该按钮将在水平和垂直方向居中。
frame.pack();
frame.setResizable(false);
您应该在调用pack()之前设置可调整大小的属性。
frame.setMinimumSize(new Dimension(1000,1000));
frame.setSize(max);
不确定为什么要设置最小大小并调用setSize()。如果希望按钮以其首选大小显示,则只需调用pack()。