2012-08-12 70 views
0
public PenApp() { 
    super("PenApp"); 
    pack(); 
    setVisible(true); 
    setVisible(false); 
    pack(); 
    setResizable(false); 
    pack(); 
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); 
    setLocation((d.width - CANVAS_SIZE)/2, (d.height - CANVAS_SIZE)/2); 
    setSize(CANVAS_SIZE + getInsets().left + getInsets().right, 
     CANVAS_SIZE + getInsets().top + getInsets().bottom); 
    addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent e) {System.exit(0);} 
    }); 

    img = Toolkit.getDefaultToolkit().getImage 
     (getClass().getResource("penguin.gif")); 
    img2 = Toolkit.getDefaultToolkit().getImage 
     (getClass().getResource("kuwa.gif")); 
    enableEvents(AWTEvent.MOUSE_EVENT_MASK); 
    x = getInsets().left; 
    y = getInsets().top; 

    setVisible(true); 
} 

这样的一段代码。我只是想知道为什么在这里使用几个pack()和setVisible()。 谢谢:)为什么打包多次?

+7

我的第一个想法是'因为程序员不知道他们在做什么,只是保持警惕/粘贴代码行直到它神奇地工作'。不要研究那样的代码,也不要将代码放在这样写的API上。 – 2012-08-12 03:15:14

回答

0

我们把物品放在一个容器中,我们可以通过setSize或pack来设置它们的大小。包装是可取的,因为它的尺寸是所有的内容都在他们的首选尺寸或以上;包离开框架布局经理负责框架大小。

由于我们将一些GUI元素设置为不可见,所以我们不需要空白空间,所以也许这就是为什么它被反复使用。我会通过评论所有的软件包来运行该应用程序,并验证它是否确实有必要。

+0

作者给出的解释是pack()方法的行为受执行环境的限制。而这两种方法的多重用法是处理环境造成的差异......其实我不明白他的话 – bunnyshell 2012-08-12 03:29:23

+1

@bunnyshell我怀疑包括作者在内的任何人都不理解这些词。这个API的URL是什么? – 2012-08-12 03:34:58

+0

他在说的是他使用setVisible/pack来最小化/消除Swing在不同窗口系统(mac,windows,unix)上渲染组件的方式的差异。我的猜测是,作者'放弃了很多代码让它做出了一些工作,而没有真正理解事情出错的地方。也就是说,在您准备好解决这些问题之前,我会谨慎地将其删除。 – 2012-08-12 03:35:57