2012-01-27 84 views
2

我注意到我的大部分摇摆GUI都会在它们居中之前闪烁。几乎所有的JFrame都发生过这种情况,我想知道是否有解决方法。我通常打电话setVisible(true),然后pack(),其次是setLocationRelativeTo(null)。这使得它出现在右上角,然后自行居中。我知道闪烁正在发生,因为每个方法调用都需要时间,但是有没有解决方法(使其更加美观和流畅)?在移动位置之前JFrames闪烁

回答

7

此顺序(这些方法)是更好的:

  1. frame.pack();
  2. frame.setLocationByPlatform(true); // superior to centering
  3. frame.setVisible(true);

如果你设置了一些可见帧的这样做,他们可能会出现的东西like this

当然,没有任何闪烁,抖动摇。 )


与(setLocationRelativeTo(null)的问题)是该图形用户界面的右上角的中心,而不是整个的JFrame。

一个JFrame的defualt尺寸为0x0和它保持这样直到pack()setSize()(但使用pack()因为你正在做的目前)被调用。因此,如果您要求在屏幕上居中显示0x0组件,JRE会将0x0大小的组件的“中间像素”放置在屏幕的中心。

或者,如果您先打包它正确的大小,并且该方法将按预期工作。例如。

frame.pack(); 
frame.setLocationRelativeTo(null); // show my splash screen! 
frame.setVisible(true); 
+1

对于'setLocationByPlatform()'+1。 – trashgod 2012-01-27 06:49:00

2

您应该先做setLocationRelativeTo(null),然后再做setVisible(true)

+0

问题在于GUI的右上角居中,而不是整个JFrame。 – imbuedHope 2012-01-27 06:39:48

+0

'pack()'应该在***'setLocationRelativeTo(null)'之前调用***使其居中。我想这就是GP辛格的意思。 (但在我的回答中,我更清楚地了解方法调用的顺序。) – 2012-01-27 06:46:43

+0

另请参阅编辑我的答案,这将有望解释发生了什么。 – 2012-01-27 06:58:36