public class MyFrame extends JFrame
{
public MyFrame(String title)
{
setSize(200, 200);
setTitle(Integer.toString(super.getSize().width));
setLayout(new FlowLayout());
for (int i = 0; i < 5; ++i)
{
JButton b = new JButton();
b.setSize(90,50);
b.setText(Integer.toString(b.getSize().width));
this.add(b);![alt text][1]
}
this.setVisible(true);
}
}为什么有按钮宽度90,我得到的是三个按钮在一行而不是两个按钮的窗口?
发布于 2010-03-29 21:49:28
如果需要,FlowLayout将从左到右(或从右到左)排列Component的包装。如果您希望显式设置每个JButton的大小,则应该使用setPreferredSize而不是setSize,因为布局管理器通常在执行布局时使用最小、首选和最大大小。
大小属性非常令人困惑--有一篇有趣的文章here。特别要注意的是:
大小属性是否始终适用?
一些布局管理器,如GridLayout、完全忽略大小属性。
FlowLayout,试图支持preferredSize的两个维度,并且可能不需要支持minimumSize或maximumSize。
发布于 2010-03-29 21:52:57
首先,您没有正确使用JFrame:您没有直接将组件添加到框架中,而是将它们添加到JPanel中,然后使用setContentPane()将其传递给框架。
另外:仅仅为了添加组件而直接对JFrame进行子类化并不是很优雅。相反,请将框架创建为单独的对象。
https://stackoverflow.com/questions/2538309
复制相似问题