java - JOptionPane 组件似乎有所不同

标签 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");

对于如何控制显示哪种类型的组件及其尺寸和颜色的外观,有任何建议吗?

最佳答案

如果您使用方法showInputDialog,您将无法控制对话框的显示方式 被 build 或设计。该方法的存在是为了提供一种快速构建输入的方法 当您不关心它的外观或行为时,它会起作用。 这一切都取决于环境的外观和感觉。
在这种情况下,这主要意味着 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);
}

关于java - JOptionPane 组件似乎有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39571644/

相关文章:

arrays - Ada 如何从用户处获取输入的整数列表并将其放入数组中

java - 如何拆分带有圆括号的字符串?

css 导航下拉 z-index 问题

java - 使用 Ruby 与 jRuby 的设计问题

c++ - C++ 中的字符数组验证

java - 如何在 Java 中创建移动图形?

flutter - 如何在Flutter中添加装饰DropdownButton

javascript - 单击外部关闭下拉菜单仅在单击 <nav> 外部时有效

java - 如何将主题动态传递给 kafka 监听器?

java - 从列表中删除节点