问题描述
代码片段:
JFrame frame = new JFrame();
frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLayout(null);
frame.setVisible(true);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH); // for fit to screen maximize
就像在游戏中一样,我不希望它可以调整大小;同时我想让任务栏和标题栏可见(就像任何应用程序一样)
解决方法
解决此问题的一种方法是扩展 JFrame 类并覆盖最大化方法以减小帧大小
import java.awt.*;
import javax.swing.*;
public class MyFrame extends JFrame
{
private Rectangle maxBounds;
public MyFrame()
{
super();
maxBounds = null;
}
@Override
public Rectangle getMaximizedBounds()
{
return maxBounds;
}
@Override
public synchronized void setMaximizedBounds(Rectangle maxBounds)
{
this.maxBounds = maxBounds;
super.setMaximizedBounds(maxBounds);
}
@Override
public synchronized void setExtendedState(int state)
{
if (maxBounds == null &&
(state & Frame.MAXIMIZED_BOTH) == Frame.MAXIMIZED_BOTH)
{
Insets screenInsets = getToolkit().getScreenInsets(getGraphicsConfiguration());
Rectangle screenSize = getGraphicsConfiguration().getBounds();
Rectangle maxBounds = new Rectangle(screenInsets.left + screenSize.x,screenInsets.top + screenSize.y,screenSize.x + screenSize.width - screenInsets.right - screenInsets.left,screenSize.y + screenSize.height - screenInsets.bottom - screenInsets.top);
super.setMaximizedBounds(maxBounds);
}
super.setExtendedState(state);
}
}
然后只需实例化自定义 MyFrame 类
MyFrame frame = new MyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLayout(null);
frame.setVisible(true);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
,
尝试更改语句的顺序:
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
frame.setResizable(false);
frame.setMinimumSize(frame.getSize());