Как активировать JOptionPane из другого класса? - PullRequest
1 голос
/ 14 марта 2012

У меня есть основной класс с основным графическим интерфейсом, из которого я хочу активировать и получать значения из нового класса с JOptionPane, как показано ниже.Поскольку у меня уже открыто главное окно графического интерфейса, как и где я должен активировать / вызвать класс ниже и, наконец, как я могу получить значения из JOptionPane?Помощь необходима!Спасибо!

import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class OptionPaneTest {

    JPanel myPanel = new JPanel();
    JTextField field1 = new JTextField(10);
    JTextField field2 = new JTextField(10);
    myPanel.add(field1);
    myPanel.add(field2);
    JOptionPane.showMessageDialog(null, myPanel);

}

Редактировать:

InputNewPerson nyPerson = new InputNewPerson();
JOptionPane.showMessageDialog(null, nyPerson);
String test = nyPerson.inputName.getText();

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Полагаю, глядя на ваш вопрос, вам нужно что-то вроде этого. Я сделал небольшой JDialog, где вы введете UserName и Answer, затем он будет передан в исходный графический интерфейс, который будет отображаться в соответствующих полях, когда вы нажимаете SUBMIT JButton.

Попробуйте этот код и задайте любой вопрос, который может возникнуть:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/*
 * This is the actual GUI class, which will get
 * values from the JDIalog class.
 */
public class GetDialogValues extends JFrame
{
    private JTextField userField;
    private JTextField questionField;

    public GetDialogValues()
    {
        super("JFRAME");
    }

    private void createAndDisplayGUI(GetDialogValues gdv)
    {       
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationByPlatform(true);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new GridLayout(0, 2));

        JLabel userName = new JLabel("USERNAME : ");
        userField = new JTextField();
        JLabel questionLabel = new JLabel("Are you feeling GOOD ?");
        questionField = new JTextField();

        contentPane.add(userName);
        contentPane.add(userField);
        contentPane.add(questionLabel);
        contentPane.add(questionField);

        getContentPane().add(contentPane);
        pack();
        setVisible(true);

        InputDialog id = new InputDialog(gdv, "Get INPUT : ", true);
    }

    public void setValues(final String username, final String answer)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                userField.setText(username);
                questionField.setText(answer);
            }
        });
    }

    public static void main(String... args)
    {
        Runnable runnable = new Runnable()
        {
            public void run()
            {
                GetDialogValues gdv = new GetDialogValues();
                gdv.createAndDisplayGUI(gdv);
            }
        };
        SwingUtilities.invokeLater(runnable);
    }
}

class InputDialog extends JDialog
{
    private GetDialogValues gdv;
    private JTextField usernameField;
    private JTextField questionField;
    private JButton submitButton;
    private ActionListener actionButton = new ActionListener()
    {
        public void actionPerformed(ActionEvent ae)
        {
            if (usernameField.getDocument().getLength() > 0
                && questionField.getDocument().getLength() > 0)
            {
                gdv.setValues(usernameField.getText().trim()
                    , questionField.getText().trim());
                dispose();
            }
            else if (usernameField.getDocument().getLength() == 0)
            {
                JOptionPane.showMessageDialog(null, "Please Enter USERNAME."
                    , "Invalid USERNAME : ", JOptionPane.ERROR_MESSAGE);
            }
            else if (questionField.getDocument().getLength() == 0)
            {
                JOptionPane.showMessageDialog(null, "Please Answer the question"
                    , "Invalid ANSWER : ", JOptionPane.ERROR_MESSAGE);
            }
        }
    };

    public InputDialog(GetDialogValues gdv, String title, boolean isModal)
    {
        this.gdv = gdv;
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setLayout(new BorderLayout());
        setModal(isModal);
        setTitle(title);

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(0, 2));
        JLabel usernameLabel = new JLabel("Enter USERNAME : ");
        usernameField = new JTextField();
        JLabel questionLabel = new JLabel("How are you feeling ?");
        questionField = new JTextField();

        panel.add(usernameLabel);
        panel.add(usernameField);
        panel.add(questionLabel);
        panel.add(questionField);

        submitButton = new JButton("SUBMIT");
        submitButton.addActionListener(actionButton);

        add(panel, BorderLayout.CENTER);
        add(submitButton, BorderLayout.PAGE_END);

        pack();
        setVisible(true);
    }
}
2 голосов
/ 14 марта 2012

JOPtionPane предоставляет несколько предустановленных типов диалогов , которые можно использовать. Однако, когда вы пытаетесь сделать что-то, что не соответствует шаблону одного из этих типов, лучше всего создать собственный диалог, сделав подкласс JDialog. Сделав это, вы получите полный контроль над тем, как расположены элементы управления, и сможете реагировать на нажатия кнопок по своему усмотрению. Вы хотите добавить ActionListener для кнопки ОК. Затем в этом обратном вызове вы можете извлечь значения из текстовых полей.

Процесс создания пользовательского диалога должен быть очень похож на то, как вы создали главное окно для вашего графического интерфейса. За исключением того, что вместо расширения JFrame вы должны расширять JDialog. Вот очень простой пример . В этом примере ActionListener просто закрывает диалоговое окно. Вы захотите добавить больше кода, который извлекает значения из текстовых полей и предоставляет их туда, где они необходимы в остальной части вашего кода.

...