无法在JDialog中的JoptionPane中显示intiali值

时间:2014-07-04 15:06:03

标签: java swing joptionpane

这可能是一个愚蠢的问题,但我无法弄清楚如何解决它。我希望我的所有JoptionPanes都可以调整大小,所以我将它们嵌入到JDialog中。我最终必须转换所有的showXxxDialog调用,所以我决定从showInputDialog开始。一切正常(Dialog看起来不错,并且可以调整大小),除了它不会在JOptionPane显示中显示初始值,即使它在JOptionPane构造函数中是正确的。这是我的代码(messageType是PLAIN_MESSAGE,但QUESTION_MESSAGE也是这样):

public class MyOptionPane {

static Object showInputDialog(Object f,  Object message, String title, int messageType, 
      Icon ico, Object[] options, Object initValue) {

     JOptionPane pane = new JOptionPane(message, messageType, JOptionPane.OK_CANCEL_OPTION,
         ico, options,  initValue);

     JDialog dialog = pane.createDialog((Component) f, title);
     if (!dialog.isResizable()) {
         dialog.setResizable(true);
     }
     pane.setWantsInput(true);

     dialog.pack();              
     dialog.setVisible(true);           

     return pane.getInputValue();   

     }
 }

非常感谢帮助!

1 个答案:

答案 0 :(得分:1)

我有好消息和坏消息,解决问题的方法是包括以下行:pane.setInitialSelectionValue(initValue);。好吧?好消息是,我无法解释为什么它不会通过构造函数自动插入initValue。希望其他人可以建立起来并向我们解释。

import javax.swing.*;
import java.awt.*;

public class MyOptionPane {

    static Object showInputDialog(Object f,  Object message, String title, int messageType,
                                  Icon ico, Object[] options, Object initValue) {


        JOptionPane pane = new JOptionPane(message, messageType, JOptionPane.OK_CANCEL_OPTION,
                ico, options,  initValue);

        JDialog dialog = pane.createDialog((Component) f, title);
        if (!dialog.isResizable()) {
            dialog.setResizable(true);
        }
        pane.setInitialSelectionValue(pane.getInitialValue()); // set it
        pane.setWantsInput(true);

        dialog.pack();
        dialog.setVisible(true);

        return pane.getInputValue();
    }
}