如何解决我希望任务栏可见且我的框架最大化
代码片段:
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());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。