6

我想要做的就是拥有一个带有 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 获取文本或将文本字段完全替换为文本区域?如果可能的话,我试图避免制作自定义对话框,而这“似乎”应该很容易做到?

4

1 回答 1

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

如果您想与您一起显示 JLabel,JTextArea您可以创建并传入JPanel包含两个Components 的 JLabel;例如

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...
于 2010-01-18T21:51:52.937 回答