Диалог, возвращающий объект

Можно ли создать JDialog в разгаре, который будет возвращать объект при нажатии кнопки «ОК»?

Например, в диалоговом окне есть текстовые поля с компонентами, составляющими адрес (название улицы, страна и т. д.).

При нажатии кнопки OK возвращается объект Address.

Я думал, что это возможно, потому что это . Но то, что я хочу, это что-то вроде того, что я упомянул выше.

Любые указания о том, как это сделать, были бы очень полезны.


person Can't Tell    schedule 14.05.2012    source источник
comment
Для примера.   -  person trashgod    schedule 14.05.2012
comment
Надеюсь, что это ">Пример JOptionPane может помочь вам в ваших начинаниях :-)   -  person nIcE cOw    schedule 14.05.2012


Ответы (3)


Как и предыдущие люди, предложили: JOptionPane может помочь вам делать то, что вы хотите. Но если вы решили реализовать это с нуля, вот SSCCE, который делает именно то, что вам нужно (ну, он возвращает строку, но ее можно легко изменить в соответствии с вашими потребностями):

import java.awt.Font;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

class MyDialog
{
    private JFrame parent;
    private JDialog dialog;
    private String information;

    MyDialog (JFrame parent)
    {
        this.parent = parent;
    }

    private JPanel createEditBox ()
    {
        JPanel panel = new JPanel ();

        JLabel dialogtitlelabel = new JLabel ("Enter Info");
        panel.add (dialogtitlelabel);
        dialogtitlelabel.setFont (new Font ("Arial", Font.BOLD, 20));


        final JTextArea informationtxt = new JTextArea ();
        informationtxt.setEditable (true);
        informationtxt.setLineWrap (true);
        informationtxt.setWrapStyleWord (true);

        JScrollPane jsp = new JScrollPane (informationtxt);
        jsp.setVerticalScrollBarPolicy (ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
        jsp.setHorizontalScrollBarPolicy (ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        jsp.setPreferredSize (new Dimension (180, 120));
        panel.add (jsp);

        JButton btnok = new JButton ("OK");
        panel.add (btnok);

        JButton btncancel = new JButton ("Cancel");
        panel.add (btncancel);

        btnok.addActionListener (new ActionListener ()
        {
            @Override public void actionPerformed (ActionEvent a)
            {
                if (informationtxt.getText () == null || informationtxt.getText ().isEmpty ())
                {
                    return;
                }

                information = informationtxt.getText ();

                dialog.dispose ();
            }
        });

        btncancel.addActionListener (new ActionListener ()
        {
            @Override public void actionPerformed (ActionEvent a)
            {
                dialog.dispose ();
            }
        });

        return panel;
    }

    void display ()
    {
        final int DWIDTH = 200;
        final int DHEIGHT = 240;

        dialog = new JDialog (parent, "Information", true);
        dialog.setSize (DWIDTH, DHEIGHT);
        dialog.setResizable (false);
        dialog.setDefaultCloseOperation (JDialog.DISPOSE_ON_CLOSE);

        dialog.setContentPane (createEditBox ());

        dialog.setLocationRelativeTo (parent);
        dialog.setVisible (true);
    }

    String getInformation ()
    {
        return information;
    }
}

public class ReturningDialogTest
{
    public static void main (String[] args)
    {
        SwingUtilities.invokeLater (new Runnable ()
        {
            public void run ()
            {   
                final JFrame frame = new JFrame ();
                frame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);

                final JPanel panel = new JPanel ();

                JButton btn = new JButton ("show dialog");

                panel.add (btn);

                final JLabel lab = new JLabel ("");

                panel.add (lab);

                frame.add (panel);

                btn.addActionListener (new ActionListener ()
                {
                    public void actionPerformed (ActionEvent e)
                    {
                        MyDialog diag = new MyDialog (frame);
                        diag.display ();

                        String info = diag.getInformation ();

                        lab.setText (info);

                        frame.pack ();
                    }
                });

                frame.setLocationRelativeTo (null);
                frame.pack ();
                frame.setVisible (true);
            }
        });
    }
}

То, что вы вводите в эту текстовую область, отображается в главном окне, когда вы нажимаете OK, просто чтобы доказать, что это работает :).

person Radu Murzea    schedule 14.05.2012

Поместите компоненты GUI для хранения адреса в панель. Предоставьте панель диалогу. Когда диалоговое окно будет закрыто, прочитайте значения компонентов на панели, чтобы создать объект Address.

person Andrew Thompson    schedule 14.05.2012

Можно ли создать JDialog в разгаре, который будет возвращать объект при нажатии кнопки «ОК»?

по этой причине существует JOptionPane

При нажатии кнопки OK возвращается объект Address.

см. Функции JOptionPane

person mKorbel    schedule 14.05.2012