Har*_*Joy 0 java swing taskbar jframe
我使用setUndecorated(true);,并getRootPane().setWindowDecorationStyle(JRootPane.FRAME);在我的JFrame.这很好但现在当我最大化我的框架时,它甚至遍布整个窗口甚至任务栏都不可见.如何使框架不隐藏任务栏?
此外,当我最大化多次最小化我的帧时,光标变为此<->,当光标位于帧的边界时,通常使用该更改帧的大小.我能为此做点什么吗?
然后一个小代码可以重现这个东西:
import javax.swing.JFrame;
import javax.swing.JRootPane;
public class Demo extends JFrame {
public Demo() {
setSize(250,125);
setUndecorated(true);
getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
setVisible(true);
}
public static void main(String[] args) {
new Demo();
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个已知的错误:http://bugs.sun.com/bugdatabase/view_bug.do?video_id = 47737788
从这个链接引用:
解决方法是子类化JFrame并覆盖setExtendedState方法,在发生之前捕获任何最大化事件,并在调用超类的setExtendedState方法之前适当地设置框架的最大边界.
import java.awt.*;
import javax.swing.*;
public class PFrame extends JFrame
{
private Rectangle maxBounds;
public PFrame()
{
super();
maxBounds = null;
}
//Full implementation has other JFrame constructors
public Rectangle getMaximizedBounds()
{
return(maxBounds);
}
public synchronized void setMaximizedBounds(Rectangle maxBounds)
{
this.maxBounds = maxBounds;
super.setMaximizedBounds(maxBounds);
}
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);
}
}
Run Code Online (Sandbox Code Playgroud)