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

来源:互联网 发布:乎字的意义和用法 编辑:程序博客网 时间:2024/05/17 22:22

为什么在有些情况下使用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();
    }
}

0 0