【发布时间】:2011-06-23 03:47:39
【问题描述】:
*EDIT 2:我刚刚发现这是一个compiz+java GUI 问题。这显然发生在这两个元素相交的地方。 我正在运行带有所有更新的最新 Ubuntu 11.04(经典桌面,而不是 Unity)。 Sun java 和 OpenJDK 都会出现这个问题。它与使用 Window-Rules Compiz 插件有关——我需要使用它。
如下面的 cmets 所述,我之前已验证我的控件已添加到正确的线程中。现在我发现禁用 Compiz Window-Rules 插件可以解决我的问题。由于我需要使用插件,所以我正在寻找解决方案。*
原帖:我正在开发一个 Java swing 应用程序。它是使用 NetBeans 6.9 构建的。它使用 GridBagLayout 管理器。目前的外观和感觉是 Nimbus(但这似乎对我将要描述的问题没有任何影响)。大多数用户在 Linux 上运行该应用程序。少数使用 Windows。大多数情况下,该应用程序运行良好。但有时会打开一个没有某些 GUI 按钮的视图。例如,保存和取消按钮可能会丢失。其他 GUI 元素通常会出现(尽管有一次我听说一个视图完全是空的,没有 GUI 元素——只是一个空的灰色窗口)。
如果用户使用右上角的“X”关闭该视图并简单地重新打开它,它将被正确绘制。缺少按钮问题的发生率不到 1%。关闭/重新打开序列几乎 100% 的时间修复它。 (如果我没记错的话,可能需要再次关闭/重新打开一次。)
通常,如果缺少某些按钮,其他元素仍然可以正确绘制。这不会影响整个视图(表单)。它似乎影响了最下面的面板,但我不确定这是否真的是一个可重复的模式。重现这一点非常困难。我每天都使用该软件,而我每个月看到的次数少于一次。少数用户更频繁地看到它,但仍然很少见。
没有错误消息。我不知道接下来要尝试什么。这种行为在不同的计算机、不同的 Linux 发行版(尽管都基于 Debian)以及许多不同的代码更改(包括更改布局管理器)中持续存在。 (我们之前使用过 NetBeans GUI 设计器。)有什么想法吗?
编辑:2011.07.05 代码大致是这样的:
public void show_some_view() {
setTitle(...)
setLayout(new GridBagLayout());
JPanel butnPanel = new JPanel();
butnPanel.setLayout(new GridBagLayout());
try {
//add stuff to panels (butnPanel, etc.)
} catch (Exception e) {
Logger.log(e);
}
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
int[] wh = ApplicationContext.get().getDisplayWidthxHeight();
setSize(wh[0], wh[1]);
setFocusable(true);
setVisible(true);
}
【问题讨论】:
-
我还没有找到解决方案...
标签: java swing user-interface