6

目前我有一个JOptionPane. 单击按钮时,我正在执行以下行。

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

它会打开一个带有文本框的弹出窗口。此文本框接受大约 40/50 个字符。事实上,我的要求是在这个阻止这个的文本框中输入长消息(最多 300 个字符)。所以我们想在这个输入对话框上想出一个文本区域?怎么可能?有没有更好的解决方案?提前致谢。

4

4 回答 4

5

官方教程包含示例,这里有另一个示例

于 2011-10-14T09:18:50.383 回答
3

放入(类型)然后在对话框被JTextArea释放后查询文本区域的内容(并检查返回结果以确保对话框没有被用户取消)。JOptionPane.showConfirmDialog()QUESTION_MESSAGE

于 2011-10-14T09:20:51.400 回答
3
/**
 * 
 * @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);
}
于 2019-04-14T17:29:57.267 回答
0

虽然我不确定使用 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 来处理此类复杂的输入表单。

于 2015-03-08T12:11:59.377 回答