Mac osx のアプレットで実行されるスイング アプリケーションを検証してきました。
この検証中に、モーダル ダイアログで次の問題が見つかりました。
- ダイアログが開いていて 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 でのみ実行される場合にのみ発生することに注意してください。