0

要約: 複数のモーダル ダイアログを作成します。非表示のモーダル ダイアログを 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);
        }
}
4

1 に答える 1

-1

ダイアログが正しく機能するためには、ダイアログの構築中にオーナー フレームまたはオーナー ダイアログを提供する必要があります。適切な視覚化を保証し、説明されている多くの不具合を修正します。次のことを試してください。

JDialog c = new JDialog(previouslyOpenedDialog);
于 2013-02-21T03:49:25.040 に答える