2010-01-18 7 views
6

Alles, was ich tun möchte, ist ein JOptionPane inputDialog mit einem JTextArea anstelle eines JTextField.
Ich habe versucht, wie die JTextArea innerhalb des Parameters Message setzen soJOptionPane anpassen Eingabe

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

Aber es hat immer noch das Textfeld am unteren Rand, und ich kann den Text aus dem JTextArea nicht bekommen. Gibt es eine Möglichkeit, entweder das ursprüngliche Textfeld zu entfernen und den Text aus dem Textbereich abzurufen oder das Textfeld vollständig durch den Textbereich zu ersetzen? Ich versuche zu vermeiden, einen benutzerdefinierten Dialog zu erstellen, wenn dies möglich ist, und dies scheint "etwas" zu sein, das leicht zu tun sein sollte?

+0

möglich Duplikat [Java - Wie ein benutzerdefiniertes Dialogfeld erstellen] (http://stackoverflow.com/questions/789517/java-how-to-create-a-custom-dialog-box) – Tony

Antwort

7

Sie sind auf dem richtigen Weg; Sie müssen nur showConfirmDialog anstelle von showMessageDialog verwenden, mit dem Sie alle Component als Ihre "Nachricht" übergeben und innerhalb der JDialog angezeigt werden können. Sie können dann den Inhalt der erfassen, wenn der Benutzer auf OK klickt; z.B.

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

Wenn Sie eine JLabel in Verbindung zeigen möchten mit Ihrem JTextArea Sie erstellen können, und übergeben Sie in einem JPanel, die sowohl Component s; z.B.

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 du schlägst mich dazu :) Außerdem wusste ich nicht über SwingUtilities.getWindowAncestor() - cool. –

+0

Danke. Früher habe ich JOptionPane.getFrameForComponent (this) benutzt, aber realisiert, dass SwingUtilities.getWindowAncestor besser ist, falls der Elternteil Ihres Dialoges auch ein JDialog ist. – Adamski

+0

Kumpel danke. Perfekte Antwort! –

Verwandte Themen