Java JOptionPane组件似乎有所不同

Java JOptionPane组件似乎有所不同,java,arrays,drop-down-menu,scrollbar,joptionpane,Java,Arrays,Drop Down Menu,Scrollbar,Joptionpane,当我使用下面的代码时,JOptionPane的外观似乎会根据数组中保存的数据项的多少而有所不同。有时是一个下拉滚动列表(类似于JComboBox)。在其他情况下,当数组包含更多项时,将使用类似于JList的组件 Object wid = JOptionPane.showInputDialog(null, "Choose Width", "Select a Width", JOptionPane.QUESTION_ME

当我使用下面的代码时,JOptionPane的外观似乎会根据数组中保存的数据项的多少而有所不同。有时是一个下拉滚动列表(类似于JComboBox)。在其他情况下,当数组包含更多项时,将使用类似于JList的组件

Object wid = JOptionPane.showInputDialog(null,
                    "Choose Width",
                    "Select a Width", JOptionPane.QUESTION_MESSAGE,
                    null, width, "9");

对于如何控制显示哪种类型的组件以及其大小和颜色的外观,如有任何建议,我们将不胜感激。

如果使用方法
showInputDialog
则无法控制对话框的显示方式 是构造或设计的。此方法的存在是为了提供一种快速构造输入的方法 对话框,当您不关心它的外观或行为时,它会工作。 这完全取决于环境的外观和感觉
在这种情况下,主要是指 19个或更低的元素将生成
JComboBox
,20个或更多的元素将生成
JList


如果您想完全控制GUI组件,您需要自己设计它们。 这并不像听起来那么难。看看这个代码。无论有多少项,它都会产生一个组合框

final int items = 100;

// create items
String[] width = new String[items];
for(int i = 0; i < items; i++) width[i] = Integer.toString(i);

// create the panel
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2,1));
JLabel label = new JLabel("Choose Width");
JComboBox<String> cmbBox = new JComboBox<>(width);
cmbBox.setSelectedIndex(8);
panel.add(label);
panel.add(cmbBox);

// show dialog
int res = JOptionPane.showConfirmDialog(null, panel,
            "Select a Width", JOptionPane.OK_CANCEL_OPTION,
            JOptionPane.QUESTION_MESSAGE, null);

// get selection
if(res == JOptionPane.OK_OPTION){
    String sel = String.valueOf(cmbBox.getSelectedItem());
    System.out.println("you selected: " + sel);
}
final int items=100;
//创建项目
字符串[]宽度=新字符串[项目];
对于(inti=0;i
首先,非常感谢!请问您为什么使用showConfirmDialog而不是showInputDialog?他们之间有什么区别?我什么时候应该互相使用?试试看,你会发现区别。无论您是否在自定义面板中使用自己的输入元素,inputDialog都将创建一个额外的文本字段。因此,我推荐confirmDialog,因为它不会创建其他组件。