Резюме: создать мулитипный модальный диалог, когда для закрытия одного скрытого модального диалога модальные диалоги в закрытом модальном диалоге могут возвращаться к модальному диалогу низкого уровня, если вы нажмете модальный диалог низкого уровня.Swing modal dialog неправильно ошибочно
способ воспроизвести проблему, запустить приложение -> щелкнуть «Button A» -> нажать «Button B» -> нажать «Button C», затем Dialog C может вернуться из диалогового окна A, если вы нажмете диалог 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);
}
}
Почему существует так много уровней владения диалогами? Я придумал вариант, в котором активирование кнопки в C вызвало исчезновение обоих диалоговых окон B & C. Будет ли это работать вместо этого (своеобразного) прецедента? –
, нам нужно, чтобы Dialog C существовал, когда закрывать Dialog B – user2093666
, как вы знаете, наш диалоговый диалог является модальным диалогом, и одновременно может появляться много диалогового окна предупреждения. поэтому будет много уровней диалоговых окон – user2093666