我一直在驗證在mac osx的applet上運行的swing應用程序。在mac osx上使用java7模態對話框的焦點問題
在此確認,我發現與模態對話框以下問題:
- 當對話是開放的,是setModal(真),它會阻止根窗口的內容,但如果你點擊某處根窗口,對話框會在它下面,但它應該保留在根窗口的頂部。
- 如果對話框有一個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上重現。 – trashgod
對我來說,使用10.7/1.6.0_33我仍然可以看到模態問題(1),但不是焦點問題(2)。 –
類似的問題,但在Ubuntu [stackoverflow](http://stackoverflow.com/questions/12373140/java-applet-jtextfield-inaccesible-after-jdialog-on-ubuntu)。 – user1307657