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事件中找出窗口是否被最大化了呢?
发布于 2011-10-21 16:58:11
使用:
(state&JFrame.MAXIMIZED_BOTH) != 0因为MAXIMIZED_BOTH是水平和垂直最大化的两位。在JSE 7下,我得到的确实是“移动,最大化”。
我不会篡改已移动和调整大小的事件的顺序。尝试重新实现关闭框也不是一个好主意。
你可以在moved上发布你自己的事件,然后会在调整大小的事件之后出现。
https://stackoverflow.com/questions/7842316
复制相似问题