要約: 複数のモーダル ダイアログを作成します。非表示のモーダル ダイアログを 1 つ閉じると、閉じたモーダル ダイアログのモーダル ダイアログは、下位のモーダル ダイアログをクリックすると、下位のモーダル ダイアログに戻る場合があります。
問題を再現するには、アプリケーションを実行 -> [ボタン A] をクリック -> [ボタン B] をクリック -> [ボタン C] をクリックし、ダイアログ A をクリックすると、ダイアログ C はダイアログ A に戻ることができます。
助けてください、ありがとう!!
import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
public class ModalDialogProblem {
/**
* @param args
*/
public static void main(String[] args) {
JDialog a = new JDialog();
a.setTitle("Dialog A");
a.setModalityType(ModalityType.APPLICATION_MODAL);
a.setLayout(null);
a.setBounds(0, 0, 400, 300);
JButton bA = new JButton("Button A");
bA.setBounds(20, 20, 180, 40);
bA.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
final JDialog b = new JDialog();
b.setTitle("Dialog B");
b.setModalityType(ModalityType.APPLICATION_MODAL);
b.setLayout(null);
b.setBounds(40, 40, 400, 300);
JButton bB = new JButton("Button B");
bB.setBounds(20, 20, 180, 40);
bB.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JDialog c = new JDialog();
c.setTitle("Dialog C");
c.setModalityType(ModalityType.APPLICATION_MODAL);
c.setLayout(null);
c.setBounds(80, 80, 400, 300);
JButton bC = new JButton("Button C");
bC.setBounds(20, 20, 180, 40);
bC.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
b.dispose();
}
});
c.add(bC);
c.setVisible(true);
}
});
b.add(bB);
b.setVisible(true);
}
});
a.add(bA);
a.setVisible(true);
}
}