【发布时间】:2012-09-05 09:41:10
【问题描述】:
我一直在验证一个在 mac osx 的小程序上运行的 swing 应用程序。
在此验证过程中,我发现模式对话框存在以下问题:
- 当对话框打开并且设置为 setModal(true) 时,它会阻止根窗口的内容,但是如果您单击根窗口上的某个位置,对话框会在它下方,但它应该保留在根窗口的顶部.
- 如果对话框有 JTextInputField,即使单击它也不会获得焦点。
所以我创建了一个小程序来显示问题。你能帮我理解这里有什么问题吗?
package com.macosx.tests;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class DialogExample extends JApplet{
private static final long serialVersionUID = 1L;
private JPanel panel;
private JButton openDialogBtn;
private void doStart() {
panel = new JPanel();
panel.setPreferredSize(new Dimension(500,500));
openDialogBtn = new JButton("open dialog");
openDialogBtn.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
ModalDialog dialog = new ModalDialog(panel, true);
dialog.setVisible(true);
}
});
panel.add(openDialogBtn);
setContentPane(panel);
}
class ModalDialog extends JDialog {
private static final long serialVersionUID = 1L;
public ModalDialog(Component parent, boolean modal) {
Dimension dimensionParentFrame = parent.getSize();
setSize(new Dimension((parent == null) ? 300 : dimensionParentFrame.width / 2, 75));
setModal(modal);
setModalityType(ModalityType.APPLICATION_MODAL);
JTextField txtField = new JTextField();
add(txtField, BorderLayout.CENTER);
}
}
@Override
public void start() {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
doStart();
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
使用上述创建一个 .jar 文件(test.jar)。完成后,创建一个包含以下内容的 html 文件:
<html>
<head>
<title>Dialog test Applet</title>
</head>
<body>
<applet id="DialogTestApplet" height="800" width="600"
code="com.macosx.tests.DialogExample"
archive="test.jar">
</applet>
</div>
</body>
</html>
完成后,运行 html 文件。您将看到一个带有灰色背景和一个按钮的小程序。然后尝试:
- 点击按钮打开对话框。之后,单击灰色区域的某处:对话框位于浏览器窗口下方,但它应该保留在顶部,对吧?
- 点击按钮打开对话框。之后单击对话框的文本字段并尝试编写一些内容:文本对话框没有获得焦点。
那么,我在这里做错了什么?请问有mac电脑的人可以测试一下吗?
谢谢
规格:
java.vendor Oracle Corporation
java.version 1.7.0_07
os.name Mac OS X
os.version 10.7.4
browser firefox 15
注意:请注意,这仅在小程序在浏览器上运行且仅在 mac osx 上运行时才会发生。
【问题讨论】:
-
无法在 10.5/1.6 上重现。
-
对我来说,使用 10.7/1.6.0_33 我仍然看到模态问题(1)但没有看到焦点问题(2)。
-
类似问题,但在 ubuntu stackoverflow.
-
我上周报告了这个错误,但我只提到了 mac osx。在这里查看:bugs.sun.com/bugdatabase/view_bug.do?bug_id=7196264。也许您应该投票/评论,看看他们是否对此有所作为。优先级很低,因为他们改变了它......
-
好消息!我刚刚在oracle中输入了bug的链接。他们与8001161 的其他未解决问题相关。此问题已解决,将在即将推出的 7u14 上提供。
标签: java macos swing applet modal-dialog