私のスイングGUIのほとんどは、自分自身を中心に置く直前にちらつきを感じました。これは、私が作ったほぼすべてのJFrameで起こりました。回避策があるかどうか疑問に思っていました。私は通常setVisible(true)
、次にpack()
とし、その後にsetLocationRelativeTo(null)
とします。これは右上に表示され、それからそれを中心にします。私はちらつきが起こっていることを知っていますが、それはそれぞれのメソッド呼び出しに時間がかかりますが、これを回避する方法があります。場所を移動する前のJFramesのフリッカー
答えて
この順序(およびこれらのメソッド)が優れていますlike this:
もちろん、フリッカーがなくても、揺らぶことなく、またはが揺れます。 ;)
ことに伴う問題(
setLocationRelativeTo(null)
)は、GUIの右上隅全体JFrameの中心とされないことです。
と呼ばれている(あなたが現在行っているとしてではなくpack()
を使用)JFrame
のdefualtサイズは0x0です、それはpack()
またはsetSize()
までそのようにとどまります。したがって、0x0コンポーネントを画面の中央に配置するよう要求すると、JREは0x0サイズのコンポーネントの「中間ピクセル」を画面の正確な中央に配置します。
最初にパックする場合、のサイズはであり、この方法は期待どおりに動作します。例えば。
frame.pack();
frame.setLocationRelativeTo(null); // show my splash screen!
frame.setVisible(true);
最後にsetLocationRelativeTo(null)
、次にsetVisible(true)
を実行する必要があります。
frame.pack();
frame.setLocationByPlatform(true); // superior to centering
frame.setVisible(true);
あなたがそれを行うの可視フレームの数を設定した場合、彼らは何かを表示されることがあります。
問題点は、GUIの右上が中央になり、JFrame全体ではないことです。 – imbuedHope
'pack()'は、 'setLocationRelativeTo(null)'の前に***と呼ばれ、中央に置く必要があります。私はそれがGP Singhが意味するものだと思います。 (しかし私の答えでは、メソッド呼び出しの順番についてもっと明示していました) –
私の答えを編集することも見てください。うまくいけば何が起こっているのか説明します。 –
+1は 'setLocationByPlatform()'のために+1します。 – trashgod