6 Stimmen

Hinzufügen eines Textbereichs im JOptionPane

Derzeit habe ich eine JOptionPane . Wenn ich auf eine Schaltfläche klicke, wird die folgende Zeile ausgeführt.

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

Es öffnet sich ein Popup mit einem Textfeld. Dieses Textfeld kann etwa 40/50 Zeichen enthalten. Meine Anforderung ist es, eine lange Nachricht (bis zu 300 Zeichen) in dieses Textfeld zu schreiben, was dies verhindert. Wir wollen also einen Textbereich in diesem Eingabedialog einrichten? Ist das möglich? Gibt es eine bessere Lösung? Vielen Dank im Voraus.

5voto

mKorbel Punkte 109073

offizielle Anleitung enthält ein Beispiel dafür, andere Beispiele ici

4voto

/**
 * 
 * @param obj
 * @param text
 * @param title
 * @return newText String
 */
public static String textAreaDialog(Object obj, String text, String title) {
    if(title == null) {
        title = "Your input";
    }
    JTextArea textArea = new JTextArea(text);
    textArea.setColumns(30);
    textArea.setRows(10);
    textArea.setLineWrap(true);
    textArea.setWrapStyleWord(true);
    textArea.setSize(textArea.getPreferredSize().width, textArea.getPreferredSize().height);
    int ret = JOptionPane.showConfirmDialog((Component) obj, new JScrollPane(textArea), title, JOptionPane.OK_OPTION);
    if (ret == 0) {
        return textArea.getText();
    } else {
        MyDialogs.Toast("Canceled by user\nChanges not saved", "Your choise");
    }
    return null;
}    

public static void Toast(Object msg, String title) {
    JOptionPane.showMessageDialog(null, msg, title, JOptionPane.OK_CANCEL_OPTION);
}

3voto

Andrew Thompson Punkte 166383

Setzen Sie eine JTextArea sur JOptionPane.showConfirmDialog() (vom Typ QUESTION_MESSAGE ) und dann den Inhalt des Textbereichs abfragen, sobald der Dialog beendet ist (und das Rückgabeergebnis überprüfen, um sicherzustellen, dass der Dialog nicht vom Benutzer abgebrochen wurde).

0voto

Sampath Punkte 1019

Ich bin mir zwar nicht sicher, ob die Verwendung des JOptionPane die beste Option für diesen Zweck ist, aber Sie können einen Textbereich oder eine andere Formularkomponente in ein OptionPane einfügen. Da Sie speziell nach einem TextArea gefragt haben, habe ich im folgenden Beispiel ein JTextField und ein JTextArea hinzugefügt.

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);
    }
}

Ich schlage jedoch vor, dass Sie für komplexe Eingabeformulare wie dieses besser ein JDialog anstelle des JOptionPane verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X