测试一下pack()在不同layout上的效果 阳光穿透心脏的1/2处 2022-07-21 12:26 52阅读 0赞 为什么在有些情况下使用pack(),只能看见标题栏,内容要放大才能看见呢? 这个问题跟你使用的layout有关。 先看一下关于pack()的解释: Java中的pack()方法是什么意思? ![icn_point.gif][] 悬赏分:0 - 解决时间:2008-9-1 23:02Java中的pack()方法是什么意思? 提问者: [junqin14][] - [童生 一级][Link 1] 最佳答案 [检举][Link 2]关于pack()方法 在 Frame 类中有一个从类 java.awt.Window 继承的方法 pack() show() 同样也继承自 java.awt.Window public void pack() 调整此窗口的大小,以适合其子组件的首选大小和布局。如果该窗口和/或其所有者仍不可显示,则两者在计算首选大小之前变得可显示。在计算首选大小之后,将会验证该 Window。 **5**回答者: [ttpsan520][] - [秀才 二级][Link 1] ![offline.gif][] 2008-9-1 17:13 java关于Frame类的pack()方法 ![icn_point.gif][] 悬赏分:10 - 解决时间:2009-3-18 18:30先声明了一个Frame类的实例f,和一个Button类的示例b,然后f.add(b);运行程序之后窗口只有一个标题栏,没有按钮.然后书上加了个f.pack();语句就能显示按钮了,这是为什么?pack方法是干什么用的? 提问者: [宅与不宅][Link 3] - [试用期 一级][Link 1] 最佳答案 [检举][Link 4]f.pack()做了这样一件事f.setSize(f.getPreferredSize());在你没加f.pack()之前,f窗体的大小是(0,0)当你加了以后,f的大小会被设置为恰当大小,也就是prefrredSize **1**回答者: [htaohongtao][] - [助理 二级][Link 1] ![offline.gif][] 2009-3-18 12:05 [我来评论>>][Link 5]提问者对于答案的评价:谢谢 下面是我的调试记录: /\* \* 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 [icn_point.gif]: http://img.baidu.com/img/iknow/icn_point.gif [junqin14]: http://passport.baidu.com/?business&aid=6&un=junqin14#2 [Link 1]: http://www.baidu.com/search/zhidao_help.html#n5 [Link 2]: http://zhidao.baidu.com/question/66774652.html?si=1# [ttpsan520]: http://passport.baidu.com/?business&aid=6&un=ttpsan520#2 [offline.gif]: /images/20220720/7a2c2bba578b4a44b823f3e5fc2fc3e9.png [Link 3]: http://passport.baidu.com/?business&aid=6&un=%D5%AC%D3%EB%B2%BB%D5%AC#2 [Link 4]: http://zhidao.baidu.com/question/90080693.html?si=4# [htaohongtao]: http://passport.baidu.com/?business&aid=6&un=htaohongtao#2 [Link 5]: http://zhidao.baidu.com/remark/90080693.html
还没有评论,来说两句吧...