String result = JOptionPane.showInputDialog(this, temp);
result
值将是输入的值。
String result = JOptionPane.showInternalInputDialog(this, temp);
即使您输入了字符串, result
值也将为空。
temp
是一个包含在JOptionPane中的面板。此JOptionPane将显示在另一个自定义JOptioPane之上。
答案 0 :(得分:6)
JOptionPane.showInternalInputDialog
仅与JDesktopPane
/ JInternalFrame
一起使用,其中this
是JDesktopPane
/ JInternalFrame
个实例。< / p>
final JDesktopPane desk = new JDesktopPane();
...
String s=JOptionPane.showInternalInputDialog(desk, "Enter Name");
如果不与上述两个组件中的任何一个一起使用,它将不会产生正确的输出,实际上它会抛出一个运行时异常:
java.lang.RuntimeException:JOptionPane:parentComponent没有 有效的父母
<强>更新强>
根据您的评论,这里有一个示例,说明如何将JPanel
添加到JDesktopPane
并致电JOptionPane#showInternalInputDialog
。重要的是我们需要在setBounds
上调用setVisible
和JPanel
,就像我们将JInternalFrame
添加到JDesktopPane
一样,当然除外我们正在添加JPanel
JFrame frame = new JFrame("JInternalFrame Usage Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// A specialized layered pane to be used with JInternalFrames
jdpDesktop = new JDesktopPane() {
@Override
public Dimension getPreferredSize() {
return new Dimension(600, 600);
}
};
frame.setContentPane(jdpDesktop);
JPanel panel = new JPanel();
panel.setBounds(0, 0, 600, 600);
jdpDesktop.add(panel);
frame.pack();
frame.setVisible(true);
panel.setVisible(true);
String result = JOptionPane.showInternalInputDialog(jdpDesktop, "h");
System.out.println(result);