Domanda

Tutto quello che voglio fare è avere un JOptionPane InputDialog con un JTextArea invece di un JTextField.
Ho provato a mettere il JTextArea all'interno del parametro di messaggio in questo modo

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

Ma ha ancora il campo di testo in basso e non riesco a ottenere il testo dal JTextArea. C'è un modo per rimuovere il campo di testo originale e ottenere il testo dal JTextArea o sostituire il campo di testo con l'area di testo del tutto? Sto cercando di evitare di dover fare una finestra di dialogo personalizzata, se possibile, e questo "sembra" come qualcosa che dovrebbe essere facile da fare?

È stato utile?

Soluzione

Sei sulla strada giusta; hai solo bisogno di usare showConfirmDialog invece di showMessageDialog, che consente di passare qualsiasi Component come "messaggio" e lo hanno visualizzato all'interno della JDialog. È quindi possibile catturare il contenuto del JTextArea se l'utente fa clic su OK; per es.

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

Se si desidera visualizzare un JLabel in congiunzione con il JTextArea è possibile creare e passare in un JPanel contenente sia Components; per es.

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...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top