我想做的就是拥有一个带有JTextArea而不是JTextField的JOptionPane inputDialog。 我尝试将JTextArea放在Message参数中,如此
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 :(得分:8)
你说的是正确的;您只需使用showConfirmDialog
代替showMessageDialog
,这样您就可以将Component
作为“消息”传递,并将其显示在JDialog
中。然后,如果用户单击“确定”,您可以捕获JTextArea
的内容; e.g。
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
一起展示JLabel,可以创建并传入包含JPanel
个Component
的{{1}}; e.g。
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...