gpt4 book ai didi

java - mac osx 上 java7 模态对话框的焦点问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:09 24 4
gpt4 key购买 nike

我一直在验证在 mac osx 的小程序上运行的 swing 应用程序。

在此验证过程中,我发现模态对话框存在以下问题:

  1. 当对话框打开并设置为 setModal(true) 时,它会阻止根窗口的内容,但是如果您单击根窗口上的某处,对话框会在它下面,但它应该保留在根窗口的顶部.
  2. 如果对话框有 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 文件。您会看到一个带有灰色背景和按钮的小程序。然后尝试:

  1. 点击按钮打开对话框。之后,单击灰色区域的某处:对话框位于浏览器窗口下方,但它应该保留在顶部,对吧?
  2. 点击按钮打开对话框。之后单击对话框的文本字段并尝试写一些东西:文本对话框没有获得焦点。

那么,我在这里做错了什么?有人可以用 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 上运行时才会发生。

最佳答案

我找到了另一个解决方法。当窗口打开时,显示一个选项 Pane 几毫秒然后将其关闭。它将焦点放在选项 Pane 上,然后返回到对话框,允许忽略错误。

将这段代码添加到您的对话框构造函数中,它应该可以工作:

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);
}

关于java - mac osx 上 java7 模态对话框的焦点问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12278546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com