JOptionPane自定义输入

时间:2010-01-18 21:26:36

标签: 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,
                                              "");

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

1 个答案:

答案 0 :(得分:8)

你说的是正确的;您只需使用showConfirmDialog代替showMessageDialog,这样您就可以将Component作为“消息”传递,并将其显示在JDialog中。然后,如果用户单击“确定”,您可以捕获JTextArea的内容; e.g。

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.
}

如果您想与JTextArea一起展示JLabel,可以创建并传入包含JPanelComponent的{​​{1}}; e.g。

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...