2013-02-21 1 views
0

Резюме: создать мулитипный модальный диалог, когда для закрытия одного скрытого модального диалога модальные диалоги в закрытом модальном диалоге могут возвращаться к модальному диалогу низкого уровня, если вы нажмете модальный диалог низкого уровня.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); 
     } 
} 
+0

Почему существует так много уровней владения диалогами? Я придумал вариант, в котором активирование кнопки в C вызвало исчезновение обоих диалоговых окон B & C. Будет ли это работать вместо этого (своеобразного) прецедента? –

+0

, нам нужно, чтобы Dialog C существовал, когда закрывать Dialog B – user2093666

+0

, как вы знаете, наш диалоговый диалог является модальным диалогом, и одновременно может появляться много диалогового окна предупреждения. поэтому будет много уровней диалоговых окон – user2093666

ответ

-1

Для правильной работы диалогов вам необходимо предоставить диалог владельца или владельца диалога во время построения диалога. Он обеспечивает правильную визуализацию и исправляет многие описанные глюки. Попробуйте следующее:

JDialog c = new JDialog(previouslyOpenedDialog); 
+0

* "и исправлены многие описанные глюки" * Нет, это не так. Я уже пробовал. –

+0

К сожалению, для диалога требуется родительский фрейм или диалог, который в контексте проблемы недоступен. Диалог отображает событие клавиатуры или событие, инициированное фоновым потоком. – user2093666

 Смежные вопросы

  • Нет связанных вопросов^_^