2010-01-18 15 views
6

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

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 da jtextarea o sostituire completamente il campo di testo con l'area di testo? Sto cercando di evitare di dover creare una finestra di dialogo personalizzata se possibile e questo "sembra" come qualcosa che dovrebbe essere facile da fare?

+0

possibile duplicato di [Java -? Come creare un finestra di dialogo personalizzata] (http://stackoverflow.com/questions/789517/java-how-to-create-a-custom-dialog-box) – Tony

risposta

7

Sei sulla linea giusta; è sufficiente utilizzare showConfirmDialog anziché showMessageDialog, che consente di passare qualsiasi Component come "messaggio" e visualizzarlo all'interno dello JDialog. È quindi possibile acquisire il contenuto di JTextArea se l'utente fa clic su OK; per esempio.

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

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

+1 mi hai battuto sopra :) Inoltre, non sapevo di SwingUtilities.getWindowAncestor() - cool. –

+0

Grazie. Ho usato JOptionPane.getFrameForComponent (questo) ma ho realizzato che SwingUtilities.getWindowAncestor è migliore nel caso in cui il genitore della tua finestra di dialogo sia anche un JDialog. – Adamski

+0

amico grazie. Risposta perfetta! –