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
イベントの中でどのように調べるのですか?
「移動」とは、あるモニタから2番目のモニタ画面に移動したことを意味します。または私はうまくいっていない... – mKorbel
たぶん、WindowStateListenerは役に立ちますか? – camickr
@camickrあなたは正しいです、ありがとう、素晴らしい提案、 – mKorbel