JOptionPane组件似乎有所不同

时间:2016-09-19 11:04:21

标签: java arrays drop-down-menu scrollbar joptionpane

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

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

对于如何控制显示哪种类型的组件及其在尺寸和颜色方面的外观,我们将不胜感激?

1 个答案:

答案 0 :(得分:1)

如果使用方法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);
}