2012-02-28 19 views
3

私は、単一のモニタと複数のモニタの両方で実行できる必要があるアプリケーションで作業しています。私は現在、私が必要とするものを達成するための2つのアプローチしか知らず、どちらも理想的ではありません。スイングの全画面ウィンドウシステム

すべてのモニタで1つのJFrameを作成すると、私は移動可能なウィンドウにJInternalFramesを使用できます。欠点は、私がJFrameに追加する何か他のものが整列していないことと、OSのいくつかが表示されている可能性があることです。

もう1つの方法は、各グラフィックデバイス用に新しいJFrameを作成し、JDialogをウィンドウとして使用することです。ここでの欠点は、JDialogsの制御が少なく、動きを制限できないことです。理想的には、JDialogの位置を制約してツールバーと重ならないようにしたいと考えています。

もっと良いアプローチがありますか?

+0

なぜJInternalFramesで各グラフィックスデバイスにJFramesを使用できないのですか? – Johannes

+0

各JInternalFrameを所有するJDesktopPaneを切り替えるためのハッキングを行わずに、画面間でウィンドウを移動することはできません。私が間違っていて、それが簡単に行われない限り。 – Dodd10x

+0

[Drag'n'Drop](http://docs.oracle.com/javase/tutorial/uiswing/dnd/intro.html)を参照してください。 –

答えて

0

あなたは後者のアプローチで行くと、ちょうどあなたを持たないJDialogのそれぞれにいるComponentListenerを追加することができます。

final JDialog dialog = new JDialog(); 
dialog.addComponentListener(new ComponentAdapter() 
{ 
    @Override 
    public void componentMoved(ComponentEvent e) 
    { 
     if (dialog.getBounds().intersects(toolbar.getBounds())) 
      moveToAvoidConflict(dialog); 
    } 
} 

そして、あなたのmoveToAvoidConflict()方法を左、下、ダイアログアップを移動する、または右のそれはもはや交差しそうあなたのツールバー。

+0

ツールバーが浮動しているときは機能しません。私はまた、JDialogが画面を横切って動くことを可能にするためにツールバーが垂直であったときにそれを無視しなければならなかった。私はそれがツールバーの後ろに窓を維持しようとする目的を破ると思う。 – Dodd10x