2012-03-14 5 views
4

Javaアプリケーションのフレームを.setLocationで表示させる場所にする方法はありますか?私はそれがユーザーによって画面の周りを移動する能力を無効にしたい。Java make JFrame "stay put"

+3

ちょうど好奇心から外れて、ウィンドウが動かされるとどうしてそんなに問題になるのですか?私はユーザーであり、これは自分のコンピュータであり、窓は私が行きたい場所にあります。完全停止。 – mbatchkarov

答えて

3

JFrameが移動されないようにする方法は次のとおりです。これはプロダクションアプリケーションでこれを使用することはお勧めできません。なぜなら、ユーザがフレームを最小/最大にしようとすると、ユーザを怒らせて他のバグを引き起こすからです。

public static void main(String args[]) throws Exception { 
class JFrameTypeLocking extends JFrame { 
    Point locked=null; 
    public JFrameTypeLocking(String string) { 
     super(string); 
     super.addComponentListener(new ComponentAdapter(){ 
      public void componentMoved(ComponentEvent e) { 
       if (locked!=null) JFrameTypeLocking.this.setLocation(locked); 
      }}); 
    } 
    public void lockLocation() { 
     locked=super.getLocation(); 
    } 
} 
JFrameTypeLocking f = new JFrameTypeLocking(""); 
f.setSize(300,300); 
f.setLocation(300,300); 
f.setVisible(true); 
f.lockLocation(); 
} 
+1

合意した人々はこれをしてはいけませんが、それはうまくいきます。 –

+1

親と一緒に移動するダイアログを使用してコンポーネントをシャドウにして、それを取り除くことができないようにするには、トリックとして使うことができます –

+0

良いですが、最小/最大のアクション中に問題が発生します。何とかmin/maxを完全に(できないかどうかわからない)、またzオーダーを保証することができれば、シャドウ効果が得られます。しかし、試してみると、ダイアログの代わりに半透明のウィンドウを使用してください。 – Java42

2

JFrameの移動を「禁止」することはできません。これはシステムGUIの一部です。あなたができることは、ComponentListenerをJFrameに追加し、移動するときに元の位置に戻すことです。

私は、視覚効果が非常に面白いと思う。

+0

-1。そうでない場合は、タイトルバーを非表示にすることができます。ウィンドウをドラッグするにはタイトルバーが必要なため、ウィンドウを移動することはできません。 – Jon

+0

@Jon Windowsの画面下部にあるアプリケーションバーを右クリックします。移動を選択します。 Win7では、アプリケーションの上にマウスを置いて、目的のウィンドウのサムネイルを右クリックします。 –

3

デーモンスレッドを作成して、フレームが移動されているかどうかを確認し、それが元の場所に戻ったかどうかを確認できます。

+0

+1これは、実際にタスクを実行する唯一のソリューションです。それはうんざりですが、うまくいきます。 –

+0

componentListenerを試してみましたが、移動しようとすると点滅し、実際には迷惑になります – Teo

+0

これは実際に唯一のクロスプラットフォームソリューションです。もちろん、ウィンドウマネージャーを混乱させることができます – mbatchkarov

0

ハックのビットですが、フルスクリーンで表示できます。フルスクリーンのアプリを移動できません。

+0

JFrame#setExtendedState(JFrame.MAXIMIZED_BOTH); –

+0

私はフレームが大きすぎないようにしたくありません。私はカスタムサイズとカスタムの場所でそれをしたい。 – Teo