Как определить, почему был перемещен JFrame (Windows, JDK6) - PullRequest
1 голос
/ 21 октября 2011
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();
            }
        }
    );
}

}

Я хочу определить, был ли кадр изменен / перемещен из-за того, что был максимизирован, или просто перетаскивался пользователем.Удивительно, но код выше выводит (после того, как я нажимаю кнопку «развернуть» на кадре):

Moved, not maximized
Resized, maximized

Это означает, что обновление состояния окна происходит после вызова componentMoved и перед вызовом componentResized.Итак, как мне узнать, разворачивается ли окно, внутри события componentMoved?

1 Ответ

0 голосов
/ 21 октября 2011

Использование:

(state&JFrame.MAXIMIZED_BOTH) != 0

as MAXIMIZED_BOTH - это два бита по горизонтали и вертикали в максимальном размере. Под JSE 7 я получаю "перемещено, развернуто".

Я бы не вмешивался в порядок перемещения и изменения размера события. Попытка переопределить закрывающую рамку тоже плохая идея.

Вы можете опубликовать собственное событие на перемещении, которое затем будет происходить после события с измененным размером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...