Asg*_*har 4 java user-interface swing
我JFrame用来为桌面应用程序创建GUI.我使用此代码根据平台屏幕的分辨率设置的GUI大小.
this.setSize(this.getToolkit().getScreenSize());
Run Code Online (Sandbox Code Playgroud)
问题是当我运行应用程序时,GUI覆盖了所有屏幕.Windows任务栏也隐藏在GUI后面.
我希望无论任务栏的大小如何,任务栏都应该在所有条件下都可见.我如何实现这一目标?
您的任务栏是否设置为自动隐藏?
我刚刚在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像素,不再覆盖任务栏.
我知道这是个老问题,但是当我使用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)
这应该可以解决问题。
| 归档时间: |
|
| 查看次数: |
10285 次 |
| 最近记录: |