使用内部对话框的JOptionPane问题

时间:2012-12-29 16:13:32

标签: java swing joptionpane

String result = JOptionPane.showInputDialog(this, temp);

result值将是输入的值。

String result = JOptionPane.showInternalInputDialog(this, temp);
即使您输入了字符串,

result值也将为空。

temp是一个包含在JOptionPane中的面板。此JOptionPane将显示在另一个自定义JOptioPane之上。

1 个答案:

答案 0 :(得分:6)

JOptionPane.showInternalInputDialog仅与JDesktopPane / JInternalFrame一起使用,其中thisJDesktopPane / JInternalFrame个实例。< / p>

final JDesktopPane desk = new JDesktopPane();
...
String s=JOptionPane.showInternalInputDialog(desk, "Enter Name");

如果不与上述两个组件中的任何一个一起使用,它将不会产生正确的输出,实际上它会抛出一个运行时异常:

  

java.lang.RuntimeException:JOptionPane:parentComponent没有   有效的父母

<强>更新

根据您的评论,这里有一个示例,说明如何将JPanel添加到JDesktopPane并致电JOptionPane#showInternalInputDialog。重要的是我们需要在setBounds上调用setVisibleJPanel,就像我们将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);