为什么jframe在最大化时会隐藏任务栏?

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)

For*_*ega 5

这是一个已知的错误: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)