2011-10-20 11 views
1
import java.awt.Dimension; 
import java.awt.event.ComponentListener; 
import java.awt.event.ComponentEvent; 
import javax.swing.SwingUtilities; 
import javax.swing.JFrame; 

public class FrmMain extends JFrame implements ComponentListener 
{ 

FrmMain() 
{ 
    super("Moves & Resize"); 
    setMinimumSize(new Dimension(512,384)); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    addComponentListener(this); 
    setVisible(true); 
} 

public void componentMoved(ComponentEvent ev) 
{ 
    int state = getExtendedState(); 
    if((state&JFrame.MAXIMIZED_BOTH)==JFrame.MAXIMIZED_BOTH) 
    { 
     System.out.println("Moved, maximized"); 
    } else { 
     System.out.println("Moved, not maximized"); 
    } 
} 
public void componentResized(ComponentEvent ev) 
{ 
    int state = getExtendedState(); 
    if((state&JFrame.MAXIMIZED_BOTH)==JFrame.MAXIMIZED_BOTH) 
    { 
     System.out.println("Resized, maximized"); 
    } else { 
     System.out.println("Resized, not maximized"); 
    } 
} 
public void componentShown(ComponentEvent ev) 
{ 
} 
public void componentHidden(ComponentEvent ev) 
{ 
} 

public static void main(String[] args) 
{ 
    SwingUtilities.invokeLater(
     new Runnable() { 
      public void run() 
      { 
       FrmMain mainwin = new FrmMain(); 
      } 
     } 
    ); 
} 

} 

フレームが最大化されたためにサイズ変更/移動されたかどうか、または単にユーザーによってドラッグされたかどうかを確認します。驚くべきことに、上記のコード出力(Iフレーム上のボタンを「最大化」を押した後):JFrameが移動された理由を特定する方法(Windows、JDK6)

Moved, not maximized 
Resized, maximized 

意味し、ウィンドウ状態の更新がcomponentMovedを呼び出した後とcomponentResizedを呼び出す前に起こります。では、ウィンドウが最大化されている場合は、componentMovedイベントの中でどのように調べるのですか?

+0

「移動」とは、あるモニタから2番目のモニタ画面に移動したことを意味します。または私はうまくいっていない... – mKorbel

+2

たぶん、WindowStateListenerは役に立ちますか? – camickr

+0

@camickrあなたは正しいです、ありがとう、素晴らしい提案、 – mKorbel

答えて

0

使用:MAXIMIZED_BOTHとして

(state&JFrame.MAXIMIZED_BOTH) != 0 

は、水平方向および垂直方向に最大の2ビットです。 JSE 7では、私は「移動され、最大化されました。

私は、移動およびサイズ変更されたイベントの順番を改ざんしません。クローズボックスを再実装しようとするのも悪い考えです。

あなたは自分自身のイベントを投稿して、サイズ変更イベントの後に来ることができます。

関連する問題