JOptionPane自定义输入

Mat*_*ips 6 java swing joptionpane

我想做的就是有一个带有JTextArea而不是JTextField的JOptionPane inputDialog.
我尝试将JTextArea放在Message参数中,就像这样

Object[] inputText = new Object[]{new JLabel("Enter Graph Information"),
                                  newJTextArea("",20,10)};
graphInfo=(String)JOptionPane.showInputDialog(null,
                                              inputText,
                                              "Create Graph",
                                              JOptionPane.PLAIN_MESSAGE,
                                              null,
                                              null,
                                              "");
Run Code Online (Sandbox Code Playgroud)

但它仍然在底部有文本字段,我无法从JTextArea获取文本.有没有办法删除原始文本字段并从jtextarea获取文本或完全替换文本区域的文本字段?我试图避免在可能的情况下进行自定义对话,这似乎"似乎"应该很容易做到的事情?

Ada*_*ski 8

你说的是正确的; 你只需要使用showConfirmDialog而不是showMessageDialog,它允许你传递任何Component作为你的"消息"并将其显示在JDialog.然后,您可以捕获JTextArea用户单击"确定"的内容; 例如

int okCxl = JOptionPane.showConfirmDialog(SwingUtilities.getWindowAncestor(this),
                                    textArea,
                                    "Enter Data",
                                    JOptionPane.OK_CANCEL_OPTION)

if (okCxl == JOptionPane.OK_OPTION) {
  String text = textArea.getText();
  // Process text.
}
Run Code Online (Sandbox Code Playgroud)

如果你想与你一起展示一个JLabel,JTextArea你可以创建并传入一个JPanel包含Components的内容; 例如

JTextArea textArea = ...
JPanel pnl = new JPanel(new BorderLayout());

pnl.add(new JLabel("Please enter some data:"), BorderLayout.NORTH);
pnl.add(textArea, BorderLayout.CENTER);

JOptionPane.show...
Run Code Online (Sandbox Code Playgroud)