setUndecorated (true) do JDialog utworzonego z instancji JOptionPane

Obecnie mamJDialog stworzony przez wywołaniecreateDialog() metoda z mojego wystąpieniaJOptionPane:

JOptionPane pane = new JOptionPane(myPanel, JOptionPane.PLAIN_MESSAGE,JOptionPane.DEFAULT_OPTION, null, new Object[]{}, null);
dialog = pane.createDialog(null, "");

Chciałem móc usunąć pasek tytułu zJDialog poprzez dzwonieniesetUndecorated(true) naJDialog, ale dostajęIllegalComponentStateException: The dialog is displayable wyjątek, gdy próbuję uruchomić mój program.

O ile wiem, okno dialogowe nie jest wyświetlane przed wywołaniemdialog.show(), co prowadzi mnie do przekonania, że ​​dialog jest rzeczywiście „wyświetlany” podczas tworzenia okna dialogowegopane.createDialog() daleko poza moje rozumienieJDialog API.

Próbowałem zadzwonićsetVisible(false) przed użyciemsetUndecorated(true), ale bez skutku.

Każda pomoc byłaby doceniana co do tego, jak lub w ogóle można usunąć pasek tytułu aJDialog tego typu. Usuwanie paska tytułu z normalnegoJDialog jest dość łatwy, jak wynika z wielu innych odpowiedzi na pytania tego typu, ale nie wydaje mi się, aby działało to jak naJDialog stworzony przezcreateDialog().

Odpowiedni kod:

            input= new JTextField(50);

        input.addKeyListener(new ConsoleKeyListener());


        input.addAncestorListener( new RequestFocusListener() );
        field = new JTextArea();
        field.setEditable(false);
        field.setLineWrap(true);
        JScrollPane area = new JScrollPane(field, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        field.setRows(10);
        field.setText(consoleText);
        JPanel myPanel = new JPanel();

        myPanel.setLayout(new BorderLayout(0,0));
        myPanel.add(input, BorderLayout.PAGE_END);
        myPanel.add(area, BorderLayout.PAGE_START);
        input.setFocusable(true);
        input.requestFocus();
        int result = 101;
        //int result = JOptionPane.showOptionDialog(null, myPanel,"", JOptionPane.DEFAULT_OPTION,JOptionPane.PLAIN_MESSAGE, null, new Object[]{}, null);
        JOptionPane pane = new JOptionPane(myPanel, JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION, null, new Object[]{}, null);

        dialog = pane.createDialog(null, "");
        dialog.setVisible(false);
        dialog.setUndecorated(true);
        //dialog.undecorated = true;


        //dialog.setOpacity(0.55f);
        removeMinMaxClose(dialog);
        removeMinMaxClose(pane); 
        removeMinMaxClose(myPanel);
        dialog.getRootPane().setOpaque(false);

        //JDialog dialog = new JDialog();
        //dialog.setVisible(false);
        //dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        //myPanel.setUndecorated(true);
        //dialog.setUndecorated(true);
        //dialog.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);  
        //dialog.setBounds( 100, 100, 300, 200 );  
        dialog.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                System.out.println("yo");
            }
        });
        dialog.setVisible(true);
        dialog.show();

questionAnswers(1)

yourAnswerToTheQuestion