Java GUI隐藏了Windows任务栏

Asg*_*har 4 java user-interface swing

JFrame用来为桌面应用程序创建GUI.我使用此代码根据平台屏幕的分辨率设置的GUI大小.

this.setSize(this.getToolkit().getScreenSize());
Run Code Online (Sandbox Code Playgroud)

问题是当我运行应用程序时,GUI覆盖了所有屏幕.Windows任务栏也隐藏在GUI后面.

我希望无论任务栏的大小如何,任务栏都应该在所有条件下都可见.我如何实现这一目标?

Hun*_*len 6

由于您使用的是JFrame,因此您应该调用:

jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);

这考虑了任务栏的位置.


And*_*son 5

您的任务栏是否设置为自动隐藏?

我刚刚在Windows 7机器上运行了这个测试代码.

import java.awt.Frame;
import javax.swing.*;

class TestFrameSize {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new JFrame("Test Screen Size");
                f.setAlwaysOnTop(true);
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                System.out.println(f.getToolkit().getScreenSize());
                f.setExtendedState(Frame.MAXIMIZED_BOTH);
                f.setVisible(true);
                System.out.println(f.getSize());
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

事实上,我跑了两次.这是输出:

任务栏配置为"自动隐藏"

java.awt.Dimension[width=1920,height=1080]
java.awt.Dimension[width=1928,height=1088]
Run Code Online (Sandbox Code Playgroud)

(其中框架看起来比可用的屏幕空间高8个像素并且更宽 - 奇数.)

任务栏配置为"自动隐藏"

java.awt.Dimension[width=1920,height=1080]
java.awt.Dimension[width=1928,height=1048]
Run Code Online (Sandbox Code Playgroud)

缩短40像素,不再覆盖任务栏.


W A*_*E Y 5

我知道这是个老问题,但是当我使用jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);setState第一次显示它时它会正确显示它。当我最小化它并再次最大化它时,它再次覆盖任务栏。我使用的是 Windows 7 和 Java 1.7。

我在这里找到了解决方案

f.setExtendedState(JFrame.MAXIMIZED_BOTH);  
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();  
f.setMaximizedBounds(env.getMaximumWindowBounds());  
f.setVisible(true);  
Run Code Online (Sandbox Code Playgroud)

这应该可以解决问题。


Sta*_*avL 2

关于什么 ?

jFrame.setState(JFrame.MAXIMIZED_BOTH);
Run Code Online (Sandbox Code Playgroud)