1

JDialog ボックス内に新しい JDialog ボックスを開きたいです。そのコードを使用して先祖JFrameに来るのを防ぎましたが、以前のJDialogボックスで新しいJDialogボックスを開くという問題に直面しています。この問題を解決する解決策を教えてください。

ここにコードがあります:-

            TestbedWorkflow tbwf = new TestbedWorkflow();
            JDialog dialog = new JDialog();
            Dimension s = SOAStreamer.getSOAStreamerObj().getContentPanel().getSize();
            dialog.setSize(s);
            dialog.setTitle("TestBed Workflow Design");
            dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            dialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
            tbwf.setSize(s);
            dialog.add(tbwf);
            tbwf.updateUI();
            dialog.setVisible(true);

TestbedWorkflow は、JDialog ボックスに追加した JFrame です。新しい JDialog ボックスを開きたいと思います。

前もって感謝します

4

1 に答える 1

1

APPLICATION_MODAL以下の例では、階層内の任意の数のダイアログを開きます。最新のものだけが操作可能です。別の方法として、ここに示すモードレスダイアログを検討してください。

更新:以下の改訂された例は、ダイアログタイトルの階層の深さを示し、偽のサブクラスを排除しています。

import java.awt.Dialog;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;

/**
* @see https://stackoverflow.com/a/12301243/230513
*/
public class DialogTest {

    private static int index;

    static class OpenAction extends AbstractAction {

        public OpenAction() {
            super("Open");
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            JDialog jd = new JDialog();
            jd.setTitle("D" + String.valueOf(++index));
            jd.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
            jd.add(new JButton(new OpenAction()));
            jd.pack();
            jd.setLocationRelativeTo(null);
            jd.setVisible(true);
        }
    }

    private void display() {
        JFrame f = new JFrame("DialogTest");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new JButton(new OpenAction()));
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new DialogTest().display();
            }
        });
    }
}
于 2012-09-06T13:30:23.023 に答える