您的位置:首页 > 编程语言 > Java开发

测试一下pack()在不同layout上的效果

2016-07-15 15:08 357 查看
为什么在有些情况下使用pack(),只能看见标题栏,内容要放大才能看见呢?

这个问题跟你使用的layout有关。

先看一下关于pack()的解释:
Java中的pack()方法是什么意思?

悬赏分:0 - 解决时间:2008-9-1 23:02Java中的pack()方法是什么意思? 提问者: junqin14 - 童生
一级 最佳答案检举关于pack()方法 在 Frame 类中有一个从类 java.awt.Window 继承的方法 pack() show() 同样也继承自 java.awt.Window public void pack() 调整此窗口的大小,以适合其子组件的首选大小和布局。如果该窗口和/或其所有者仍不可显示,则两者在计算首选大小之前变得可显示。在计算首选大小之后,将会验证该
Window。 5回答者: ttpsan520 - 秀才
二级

2008-9-1 17:13

java关于Frame类的pack()方法

悬赏分:10 - 解决时间:2009-3-18 18:30先声明了一个Frame类的实例f,和一个Button类的示例b,然后f.add(b);运行程序之后窗口只有一个标题栏,没有按钮.然后书上加了个f.pack();语句就能显示按钮了,这是为什么?pack方法是干什么用的?
提问者: 宅与不宅 - 试用期
一级 最佳答案检举f.pack()做了这样一件事f.setSize(f.getPreferredSize());在你没加f.pack()之前,f窗体的大小是(0,0)当你加了以后,f的大小会被设置为恰当大小,也就是prefrredSize 1回答者: htaohongtao - 助理
二级

2009-3-18 12:05我来评论>>提问者对于答案的评价:谢谢

下面是我的调试记录:

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package testpackmethod;

import javax.swing.*;

import java.awt.*;

/**

*

* @author Administrator

*/

public class Main {

/**

* @param args the command line arguments

*/

Main() {

JFrame jFrame = new JFrame("Test pack()");

JButton jbt = new JButton("ok");

JPanel jPanel = new JPanel();

// jFrame.setLayout(new FlowLayout());//可看见按钮居中显示,放大后居上方中央

// jFrame.add(jbt);

// jFrame.setLayout(new BorderLayout());//可看见按钮占据中央,并且可延伸

// jFrame.add(jbt);

// jFrame.setLayout(new GridLayout(1,1));//可看见按钮,效果同上

// jFrame.add(jbt);

// jFrame.setLayout(new SpringLayout());//放大后才可看见按钮居左上方,未放大时,整个框架都被pack up了。

// jFrame.add(jbt);

/*

//添加两个弹簧后,或许你会认为不需要再放大就能看见了,但是很遗憾,仍需要放大,然后才能看见按钮,你会发现它居上方中央

jFrame.add(jPanel);

SpringLayout springLayout = new SpringLayout() ;

jPanel.setLayout( springLayout );//可看见按钮//注意:BoxLayout can't be shared//得用JPanel。。。不能直接用JFrame。。。

jPanel.add(jbt);

Spring spring = Spring.constant(0,10,20);

springLayout.putConstraint(SpringLayout.WEST, jbt, spring, SpringLayout.WEST, jPanel);

springLayout.putConstraint(SpringLayout.EAST, jPanel, spring, SpringLayout.EAST, jbt);

*/

/*

//再添加两个弹簧后,看看效果如何,发现看得见按钮了,而且不论放大与否,都是居中显示

jFrame.add(jPanel);

SpringLayout springLayout = new SpringLayout() ;

jPanel.setLayout( springLayout );//可看见按钮//注意:BoxLayout can't be shared//得用JPanel。。。不能直接用JFrame。。。

jPanel.add(jbt);

Spring spring = Spring.constant(0,10,20);

springLayout.putConstraint(SpringLayout.WEST, jbt, spring, SpringLayout.WEST, jPanel);

springLayout.putConstraint(SpringLayout.EAST, jPanel, spring, SpringLayout.EAST, jbt);

springLayout.putConstraint(SpringLayout.NORTH, jbt, spring, SpringLayout.NORTH, jPanel);

springLayout.putConstraint(SpringLayout.SOUTH, jPanel, spring, SpringLayout.SOUTH, jbt);

*/

/*

//再set一下frame size,注意要把后面的pack语句暂时注释掉,再来看看效果如何,size变化了,而且不论放大与否,都是居中显示

jFrame.setSize(1000,618);

jFrame.add(jPanel);

SpringLayout springLayout = new SpringLayout() ;

jPanel.setLayout( springLayout );//可看见按钮//注意:BoxLayout can't be shared//得用JPanel。。。不能直接用JFrame。。。

jPanel.add(jbt);

Spring spring = Spring.constant(0,10,20);

springLayout.putConstraint(SpringLayout.WEST, jbt, spring, SpringLayout.WEST, jPanel);

springLayout.putConstraint(SpringLayout.EAST, jPanel, spring, SpringLayout.EAST, jbt);

springLayout.putConstraint(SpringLayout.NORTH, jbt, spring, SpringLayout.NORTH, jPanel);

springLayout.putConstraint(SpringLayout.SOUTH, jPanel, spring, SpringLayout.SOUTH, jbt);

*/

//jFrame.setLayout(new GridBagLayout());//可看见按钮

//jFrame.add(jbt);

// jFrame.setLayout(new CardLayout());//可看见按钮,居中显示,而且不论放大与否,都会占据所有空间

//jFrame.add(jbt, "1");

//jFrame.add(jPanel);

//jPanel.setLayout(new BoxLayout(jPanel,BoxLayout.X_AXIS));//可看见按钮//注意:BoxLayout can't be shared//得用JPanel。。。不能直接用JFrame。。。

//jPanel.add(jbt);//居左显示,放大后居左而且占中间显示

// jFrame.add(jPanel);

// jPanel.setLayout(new OverlayLayout(jPanel) );//可看见按钮//注意:OverlayLayout can't be shared//得用JPanel。。。不能直接用JFrame。。。

// jPanel.add(jbt);//效果竟然同上,很意外

jFrame.pack();

jFrame.setVisible(true);//don't forget!

}

public static void main(String[] args) {

// TODO code application logic here

Main main = new Main();

}

}

收藏于 2009-08-03
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  布局 测试 java swing