Lui*_*ves 8 java macos applet swing modal-dialog
我一直在验证在mac osx的applet上运行的swing应用程序.
在此验证期间,我发现模式对话框存在以下问题:
所以我创建了一个小程序来显示问题.你能帮我理解这里有什么问题吗?
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用上面的方法创建.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>
Run Code Online (Sandbox Code Playgroud)
完成后,运行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
Run Code Online (Sandbox Code Playgroud)
注意:请注意,这仅在applet在浏览器上运行且仅在mac osx上运行时才会发生.
小智 6
我发现了另一种解决方法.打开窗口时,显示一个选项窗格几毫秒并关闭它.它将焦点放在选项窗格上,然后返回到对话框,允许忽略该错误.
将此snipet代码添加到对话框构造函数中,它应该工作:
addWindowListener(new WindowAdapter(){
public void windowOpened(WindowEvent e){
JOptionPane pane = new JOptionPane();
final JDialog dialog = pane.createDialog("Please Wait");
Timer timer = new Timer(50, new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.dispose();
}
});
timer.setRepeats(false);
timer.start();
dialog.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)
您应该在 ModalDialog 上放置一个“所有者”窗口。为此,您必须在 ModalDialog 构造函数中调用 super(owner),并且可以使用 检索组件的父parent
窗口SwingUtilities.getWindowAncestor(parent)
。
归档时间: |
|
查看次数: |
4855 次 |
最近记录: |