Как добавить текстовую область в JOptionPane

В настоящее время у меня есть JOptionPane. При нажатии кнопки я выполняю следующую строку.

JOptionPane.showInputDialog(this,"Enter your message","Messages",2);

Он открывает всплывающее окно с текстовым полем. Это текстовое поле принимает около 40/50 символов. На самом деле мое требование состоит в том, чтобы взять длинное сообщение (до 300 символов) в это текстовое поле, которое останавливает это. Итак, мы хотим придумать текстовую область в этом диалоговом окне ввода? Можно как? Есть ли лучшее решение? Заранее спасибо.


person java_enthu    schedule 14.10.2011    source источник
comment
Не используйте «магические числа» (например, «2» в этом вызове метода). Вместо этого используйте определенные константы.   -  person Andrew Thompson    schedule 14.10.2011
comment
Этот пример может помочь вам уточнить ваш вопрос.   -  person trashgod    schedule 14.10.2011


Ответы (3)


официальный учебник содержит пример для этого, другие примеры здесь

person mKorbel    schedule 14.10.2011

Поместите JTextArea в JOptionPane.showConfirmDialog() (типа QUESTION_MESSAGE), затем запросите содержимое текстовой области после удаления диалогового окна (и проверьте возвращаемый результат, чтобы убедиться, что диалоговое окно не было отменено пользователем).

person Andrew Thompson    schedule 14.10.2011
comment
@kleopatra Хм .. хорошее замечание. Ответ отредактирован для использования диалогового окна подтверждения. - person Andrew Thompson; 14.10.2011
comment
1) Это «качели» (единственное число, начинающееся с заглавной буквы), а не «качели». 2) Я не экстрасенс, поэтому не знаю, чего вы не понимаете. Будьте конкретны. - person Andrew Thompson; 14.10.2011
comment
удаленный комментарий, указывающий пальцем на завершение кода моей IDE ‹g› - person kleopatra; 14.10.2011
comment
@AndrewThompson: я создал объект JTextArea и добавил в JOptionPane.confirmationDialog.(....), но возвращаемый тип метода — int. Где как я хочу текст, который вводит пользователь. - person java_enthu; 14.10.2011
comment
Хорошо, но я также имел в виду то, что написал, когда добавлял Для получения дополнительной помощи опубликуйте SSCCE вашей лучшей попытки. - person Andrew Thompson; 14.10.2011

Хотя я не уверен, является ли использование JOptionPane лучшим вариантом для этой цели, вы можете добавить текстовую область или любой другой компонент формы в OptionPane. Поскольку вы запросили именно TextArea, я добавил JTextField и JTextArea в следующем примере.

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SpringLayout;

public class Main {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Option Pane Text Area Example");

        final SpringLayout layout = new SpringLayout();

        final JPanel panel = new JPanel(layout);
        panel.setPreferredSize(new Dimension(250, 160));

        JLabel lblName = new JLabel("Name");
        panel.add(lblName);
        JTextField txtName = new JTextField(10);
        txtName.setBorder(BorderFactory.createLineBorder(Color.black));
        panel.add(txtName);

        JLabel lblAddress = new JLabel("Address");
        panel.add(lblAddress);
        JTextArea txtAddress = new JTextArea();
        txtAddress.setBorder(BorderFactory.createLineBorder(Color.black));
        txtAddress.setLineWrap(true);
        txtAddress.setWrapStyleWord(true);
        JScrollPane scrollPane = new JScrollPane(txtAddress,
                   JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
                   JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane.setPreferredSize(new Dimension(250, 100));
        panel.add(scrollPane);

        layout.putConstraint(SpringLayout.WEST, lblName,
                             0,
                             SpringLayout.WEST, panel);
        layout.putConstraint(SpringLayout.NORTH, lblAddress,
                             10,
                             SpringLayout.SOUTH, lblName);

        layout.putConstraint(SpringLayout.WEST, txtName,
                             25,
                             SpringLayout.EAST, lblName);
        layout.putConstraint(SpringLayout.NORTH, scrollPane,
                             10,
                             SpringLayout.SOUTH, lblAddress);


        int result = JOptionPane.showConfirmDialog(frame, panel,
                "Text Box and Text Area Example", JOptionPane.OK_CANCEL_OPTION,
                JOptionPane.PLAIN_MESSAGE);

        if (result == JOptionPane.YES_OPTION) {
            System.out
                    .println(txtName.getText() + ",\n" + txtAddress.getText());
        } else {
            System.out.println("Canceled");
        }

        System.exit(0);
    }
}

Тем не менее, я предлагаю вам использовать JDialog вместо JOptionPane для сложных форм ввода, подобных этим.

person Sampath    schedule 08.03.2015