JOptionPane настроить ввод - PullRequest
6 голосов
/ 19 января 2010

Все, что я хочу сделать, это иметь входной диалог JOptionPane с JTextArea вместо JTextField. Я попытался поместить 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 Ответ

8 голосов
/ 19 января 2010

Вы на правильных линиях; вам просто нужно использовать showConfirmDialog вместо showMessageDialog, что позволяет вам передавать любое Component в качестве вашего "сообщения" и отображать его в JDialog. Затем вы можете захватить содержимое JTextArea, если пользователь нажмет OK; например,

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, содержащий оба Component s; например,

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