【问题标题】:Java Swing GUI renders behind windows task barJava Swing GUI 在 Windows 任务栏后面呈现
【发布时间】:2016-05-15 05:21:32
【问题描述】:

我对应用程序的 GUI 位置感到不安。这意味着在 Linux (Centos 6) 中,它从任务栏上方正确显示,但在 Windows 8.1 中,它从屏幕底部显示在任务栏后面。可能是什么问题?

我正在使用以下代码设置尺寸。 (我在下面附上了屏幕)

UiConfig.getInstance().bottomRightUI(dispalyWidth, displayeHeight);

setBounds(UiConfig.getInstance().getX(), UiConfig.getInstance().getY(),
dispalyWidth, displayeHeight);

以下用于从当前屏幕获取动态尺寸的类

public class UiConfig {

private static final UiConfig instance = new UiConfig();

public static UiConfig getInstance() {
    return instance;
}

public void bottomRightUI(int width, int height) {
    x = (int) ((screen_width - width));
    y = (int) ((screen_height - height));
}

public int getX() {
    return this.x;
}

public int getY() {
    return this.y;
}

}

在 Linux 上

在 Windows 上

【问题讨论】:

  • 不是有windows设置让任务栏一直在前面吗?对我来说似乎与 Java 无关。
  • @Thomas ;在 Windows 上运行的其他应用程序正常(意味着正常)。
  • 这是 Windows 的一种标准行为,它在除无边框窗口之外的所有内容上呈现任务栏(例如具有无边框窗口功能的游戏,但它们通常使用 DirectX 呈现)。我认为不可能在它前面渲染一个窗口。 @ChamindaBandara 所以其他应用程序将在任务栏上呈现?
  • 是的,这是操作系统的预期行为。我会计算屏幕上的“安全”区域并在其中设置窗口的位置。也许像this
  • TaskBar 使用 GraphicsEnviroment 返回整数值(像素),现在不知道 TaskBar 是否可隐藏

标签: java linux windows swing user-interface


【解决方案1】:

要在 Windows 上实现任务栏透明,需要将桌面大小报告为“没有任务栏”以使像素与任务栏的 Alpha 通道混合。当您将任务栏设置为不透明时,您将获得所需的行为。

操作系统正在向 Swing / Java 输入屏幕尺寸上的数字,如果输入一组数字,它将按照指示使用它们。

解决此问题的唯一方法是编写自定义“操作系统”检测代码、自定义“任务栏”检测有问题操作系统的代码,并编写摇摆重新配置例程以“调整”尺寸以缩小占用空间,尽管操作系统正在报告足迹。这种代码是高度不可移植的,在创建 Swing 时肯定不需要,所以它不是 Swing 原生的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 2013-10-26
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多