2010-01-18 71 views
6

Todo lo que quiero hacer es tener un JOptionPane inputDialog con un JTextArea en lugar de un JTextField.
He intentado poner el JTextArea dentro del parámetro del mensaje como talJOptionPane personalizar entrada

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

pero todavía tiene el campo de texto en la parte inferior y no puedo obtener el texto de la JTextArea. ¿Hay alguna manera de eliminar el campo de texto original y obtener el texto de jtextarea o reemplazar el campo de texto con el área de texto por completo? Estoy tratando de evitar tener que hacer un diálogo personalizado si es posible y esto "parece" algo que debería ser fácil de hacer.

+0

posible duplicado de [Java -? Cómo crear un cuadro de diálogo personalizado] (http://stackoverflow.com/questions/789517/java-how-to-create-a-custom-dialog-box) – Tony

Respuesta

7

Estás en las líneas correctas; solo necesita usar showConfirmDialog en lugar de showMessageDialog, lo que le permite pasar cualquier Component como su "mensaje" y mostrarlo dentro del JDialog. A continuación, puede capturar el contenido del JTextArea si el usuario hace clic en Aceptar; p.ej.

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

Si desea mostrar un JLabel en conjunto con su JTextArea puede crear y transmitir en un JPanel que contiene ambos Component s; p.ej.

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 me ganaste :) Además, no sabía acerca de SwingUtilities.getWindowAncestor() - cool. –

+0

Gracias. Solía ​​usar JOptionPane.getFrameForComponent (esto), pero me di cuenta de que SwingUtilities.getWindowAncestor es mejor en caso de que el elemento principal de su diálogo también sea un JDialog. – Adamski

+0

amigo gracias. ¡Respuesta perfecta! –