JOptionPane personalizzare ingresso
-
21-09-2019 - |
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?
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 Component
s; 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...