1

新しい JWindow または JFrame を作成するときに、ウィンドウの端をモニターの表示されている端に右揃えにすることは可能ですか?

これは、複数のモニターを備えた Windows システムで使用されます。理想的には、新しいウィンドウの右端を一番右の画面の右端にスナップさせたいと考えています。現在、GraphicsDevices を取得し、並べ替え、ポイントの位置 + ウィンドウ サイズを比較し、ウィンドウの右端が表示可能な画面領域の境界外にあるかどうかを検出した場合、表示する前にウィンドウを「移動」するように位置を調整することでこれを行っています。本質的に同じアイデアであるこの質問を見つける前に、これを行いました(JFrameがマルチスクリーン環境で画面に表示されているかどうかを知る方法)。これで目的は達成。SSCCE の広告主が、私がすでに行っていることを投稿してほしいと思っていることは知っています。また、興味がある場合は、他の質問にも既に投稿されていますが、私の意図は、これらの結果を取得するためのより簡単でネイティブな方法があるかどうかを尋ねることです? 補足として、最初の呼び出しに 2.6 ミリ秒かかり、追加の呼び出しごとに 0.066 ミリ秒かかります。もともと私のナノ秒からミリ秒への計算は間違っていたので、現在はパフォーマンスは問題ではありませんが、これを行うためのより良い方法があるかどうかはまだ知りません.

興味がある場合は、デバッグ sysout の例をいくつか示します。最初の 2 つは最初のモニターの左側に、3 番目のテストは 2 番目のモニターの右側に:

最後のモニター長方形: java.awt.Rectangle[x=1920,y=150,width=1680,height=1050]
比較するポイント: java.awt.Point[x=20,y=100], windowWidth:1270
rightBoundOfMonitor: 3600.0
rightBoundOfNewWindow: 1290.0
範囲内
調整時間:2536893ns、2.536893ms
最後のモニター長方形: java.awt.Rectangle[x=1920,y=150,width=1680,height=1050]
比較するポイント: java.awt.Point[x=20,y=100], windowWidth:1270
rightBoundOfMonitor: 3600.0
rightBoundOfNewWindow: 1290.0
範囲内
調整時間:65880ns、0.06588ms
最後のモニター長方形: java.awt.Rectangle[x=1920,y=150,width=1680,height=1050]
比較するポイント: java.awt.Point[x=3147,y=315], windowWidth:1270
rightBoundOfMonitor: 3600.0
rightBoundOfNewWindow: 4417.0
立入禁止で
調整時間:152949ns、0.152949ms

編集: パフォーマンスは、当初考えていたほど問題ではありませんでした。(1000 ではなく、1 ミリ秒で 1000000 ns)。GraphicsDevice への最初の呼び出しには 2.5 ミリ秒かかりますが、これは許容範囲であり、位置を特定するための後続の呼び出しははるかに高速です。現在、私が思いついたよりも簡単にこれを行うための API 呼び出しや、他の人が派生したものはないようです。

4

1 に答える 1

1

参考までに、フレームをデフォルト画面の右下隅に固定するこの単純なとあなたのアプローチを比較してみてください。GraphicsDevice目標は、リストのループのどの部分が所要時間の大半を占めているかを判断することです。Rectangle#getBounds()それが重要だとは思いませんが、GraphicsDevice#getDefaultConfiguration()そうかもしれません。最上位のコンテナーはホスト プラットフォームによって所有されます。ホスト プラットフォームは通常、Swing と同じシングルスレッド ルールを適用する必要があるため、できることはほとんどありません。

于 2013-11-05T18:04:18.117 に答える