ユーザーがマウスをドラッグしてフレームのサイズを変更すると、JFrameの高さと幅を知りたいという状況が発生しました。 Listen to JFrame resize events as the user drags their mouse?JFrameの高さと幅のリアルタイムリッスン
私の問題がある:私は私の「HSFrame」クラスはActionListenerをJFrameのを拡張して実装してきたすべての方法を
は、私はこれを調査し、次の質問に設けた答えは私のほんの少しの助けではなく、 、MouseMotionListener(ActionListenerはこの質問とは無関係です)。この質問に関係するのはMouseMotionListenerです。私は、JPanelを拡張する "CanvasPanel"という別のクラスを持っています。これは、グラフィックスオブジェクトを使用して、描画文字列によってリアルタイム情報を更新する場所です。
public void mouseMoved(MouseEvent e)
{
}
public void mouseDragged(MouseEvent e)
{
validate();
canvas.repaint();
}
これが私の "HSFrame" クラス(のMouseMotionListenerを実装し、JFrameのを拡張)からのコードの抜粋です。このコード例では、「canvas」はCanvasPanelオブジェクトであり、MouseDraggedが呼び出されるたびにそのrepaint()メソッドを呼び出しています。
これは、(おそらく)ComponentListenerのcomponentResized()メソッド(これはMouseReleasedに関連付けられている)とは対照的にリアルタイムの更新を提供するため、MouseMotionListenerを使用することを選択しました。
左上隅からフレームのサイズを変更すると、すべてが100%完全に更新されます。高さ、幅、X、Yの値はすべて完全に再ペイントされます。
ただし、右下隅からサイズを変更すると、リアルタイムで更新されません。そして私はあなたについて知りませんが、私は物事を右下からサイズ変更することを好みます。
"CanvasPanel"クラス自体では、ComponentListenerを拡張してそこの "HSFrame"オブジェクトにリスナーを追加しました。リアルタイムでは更新されませんでしたが、後で高さと幅を再描画しますHSFrameのサイズを変更したコーナーに関係なく、マウスが解放されます。
メイン質問: MouseMostionListenerを取得して、右下からJFrameのサイズを変更していることを知ることはできますか?タイトルバーをクリックしてドラッグしてフレームを移動すると、左上隅からサイズを変更すると聞こえます(タイトルバーとやりとりしています)。何かがJFrameの他の境界に向かうときは、それは聞こえません。
Mmmmはプロパティ変更イベントを発生させませんか? –
bottom/rightからサイズを変更すると、componentResized()イベントが動的に起動します。私はXPでJDK6_7を使用しています。問題を示す[SSCCE](http://www.sscce.org)を投稿してください。 – camickr
[SSCCE](http://pastebin.com/Q0nbQcpm) ここでは基本的な例を示します。 MainClass.javaとして保存し、コンパイルして実行します。 1つのJAVAファイルと同じように動作するはずです。 ここでの問題は次のとおりです。メインアプリケーションウィンドウのサイズ変更は、ユーザーが右下からドラッグするとリアルタイムで再描画されません。左上からドラッグしてリアルタイムに塗り直します。 これは私の考えです。どこからでもデバッグウィンドウをドラッグすると、リアルタイムで更新されます。 なぜ、メインウィンドウでそれをしないのですか?両方のリスナを両方のフレームに追加しました。 ボトム・ライトは動作しないものです。 – Waffle