2010-01-18 90 views
6

我想要做的是有一个JTextArea而不是JTextField的JOptionPane inputDialog。
我试图把JTextArea的消息参数的内部,像这样JOptionPane自定义输入

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

但它仍然具有文本字段在底部,我不能从JTextArea中的文本。 有没有办法删除原始文本字段,并从jtextarea中获取文本或完全替换文本区域的文本字段?如果可能,我试图避免必须进行自定义对话框,这“看起来”像是应该很容易做的事情?

+0

可能重复【JAVA - 如何创建自定义对话框(http://stackoverflow.com/questions/789517/java-how-to-create-a-custom-dialog-box) – Tony 2014-10-25 11:38:46

回答

7

你说得对;你只需要使用showConfirmDialog而不是showMessageDialog,它允许你通过任何Component作为你的“消息”,并让它显示在JDialog内。如果用户单击确定,则可以捕获JTextArea的内容;例如

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

如果你想显示在您的JTextArea您可以创建并传递一个包含两个ComponentJPanel结合的JLabel;例如

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你打我吧:)另外,我不知道SwingUtilities.getWindowAncestor() - 很酷。 – 2010-01-18 21:55:13

+0

谢谢。我曾经使用JOptionPane.getFrameForComponent(this),但是实现SwingUtilities.getWindowAncestor会更好,以防对话框的父类也是JDialog。 – Adamski 2010-01-18 21:57:10

+0

哥们谢谢你。完美的答案! – 2010-01-19 04:46:43