这可能是一个愚蠢的问题,但我无法弄清楚如何解决它。我希望我的所有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();
}
}
非常感谢帮助!
答案 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();
}
}