Java Can';t在JDialog中的JoptionPane中显示初始值

Java Can';t在JDialog中的JoptionPane中显示初始值,java,swing,joptionpane,Java,Swing,Joptionpane,这可能是一个愚蠢的问题,但我不知道如何解决它。我希望我所有的工作窗格都可以调整大小,所以我将它们嵌入到JDialog中。我最终将不得不转换所有showXxxDialog调用,因此我决定从showInputDialog开始。一切都正常(对话框看起来不错,并且可以调整大小),除了它不会在JOptionPane显示中显示初始值,即使它在JOptionPane构造函数中是正确的。这是我的代码(messageType是PLAIN\u MESSAGE,但QUESTION\u MESSAGE也一样): 非常感

这可能是一个愚蠢的问题,但我不知道如何解决它。我希望我所有的工作窗格都可以调整大小,所以我将它们嵌入到JDialog中。我最终将不得不转换所有showXxxDialog调用,因此我决定从showInputDialog开始。一切都正常(对话框看起来不错,并且可以调整大小),除了它不会在JOptionPane显示中显示初始值,即使它在JOptionPane构造函数中是正确的。这是我的代码(messageType是PLAIN\u MESSAGE,但QUESTION\u MESSAGE也一样):


非常感谢您的帮助

我有好消息和坏消息,解决您的问题的方法是包含以下行:
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();
    }
}

请给我们举一个你如何称呼它的例子。另外,你确定初始值是选项数组的一部分吗?@PaulMorrison对我不起作用。嗯,是的,我确实在输入字段中看到一个值。但是,上述代码仅在为“options”变量指定null时有效。当您提供一个选项数组时,应该为输入组件显示一个组合框,但是我得到了多个带有数组值的按钮。所以我仍然认为有些地方不对劲。也许我的测试代码是错的,这就是为什么你被要求发布你的SSCCE来演示这个问题。方法使用的上下文也很重要。谢谢,camickr,options是null-调用代码:String ans=(String)MyOptionPane.showInputDialog(driver.frame,“输入或更改文本”,“编辑上游端口名”,JOptionPane.PLAIN\u消息,null,null,upstreamimport)@PaulMorrison,整个测试代码都应该和你的问题一起发布,这样我们就可以复制/粘贴/编译和测试了。我建议这里的代码在这种情况下可以工作,但是,JOptionPane中的方法并不是一直使用的方式。它旨在提供供用户选择的选项列表。退房我建议此代码将不再支持此默认功能。它可能不起作用,因为:“initialValue:最初选择的选项;如果为空,则最初将不选择任何内容;只有在使用选项时才有意义”,如
JOptionPane
javadochanks,@camickr,这是我能看到的唯一插入初始值的方法。可能有一个正确的方法-我会再挖一些!真正的问题是JOptionPane的文档太糟糕了!基本的showxxxDialog函数相当不错,但是当您想做一些非标准的事情时,您根本得不到任何帮助。想必构造器以某种方式与showxxxDialog函数相结合,但很难弄清楚是如何实现的!不过,我认为我正在进步——在你们所有人的帮助下!谢谢!:-)
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();
    }
}