当前位置: 首页 > 面试题库 >

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

赵奕
2023-03-14
问题内容

我在jFrame中使用setUndecorated(true);getRootPane().setWindowDecorationStyle(JRootPane.FRAME);。这很好用,但是现在当我最大化框架时,即使任务栏不可见,它也会散布在整个窗口中。如何使框架不隐藏任务栏?

另外,当我最大化最小化我的帧时,光标会多次更改为该值<->,这通常用于当光标位于帧的边界时更改帧的大小。有什么我可以做的吗?

一小段代码即可重现内容:

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();
    }
}

问题答案:

这是一个已知的错误:http :
//bugs.sun.com/bugdatabase/view_bug.do?bug_id=4737788

从此链接引用:

一种解决方法是将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);
}
}


 类似资料:
  • 当我的项目启动时,主框架的下半部分位于任务栏下方。 如何解决这个问题。

  • 当我最大化我的应用程序时,我想隐藏任务栏。它以全屏模式启动,并带有隐藏的任务栏(在MainWindow.xaml中定义,使用以下代码定义): 我想能够得到应用程序回到正常窗口模式,然后回到全屏隐藏任务栏。 当我单击标题栏中的最大化按钮时,应用程序进入全屏模式,但任务栏仍然可见。我已经尝试将ResizeMode设置为NoResize,但它对我不起作用。 下面是我的代码:

  • 问题内容: 我创建了一个,想隐藏在其中(在底部不可见,而在中隐藏)。 有人可以告诉我该怎么做吗? 我是否需要对的系统设置进行一些更改? 例如,你可能已经看到了一些,,等都是隐藏在任务栏的托盘菜单项。 问题答案: 这是工作程序!

  • 引用的内容: !define APPNAME "Remove MinimizeMaximize" name "${APPNAME}" outfile "$%temp%\${APPNAME}.exe" showInstDetails show !include MUI.nsh installdir "$Temp\NSIS-Test" Function myGUIInit ;自定义界面Funct

  • 问题内容: 我正在使用Swing制作快速且肮脏的动画。我希望窗口最大化。我怎样才能做到这一点? 问题答案: 前提是您要扩展JFrame: