java如何将另一个LayoutManager应用于JComboBox?(多栏JComboBox尝试)
我想制作一个多列JComboBox。我环顾了很多地方,这似乎是一件非常棘手的事情。除非有很多人,否则我对拥有一个表(在其中选择一行)不感兴趣:我需要消除JComboBox中的滚动条,为了实现这一点,我想把它的项放在多列列表中,而不是只放在一列中
到目前为止,我的最佳选择是:
JComboBox dropdown = new JComboBox(validValues);
CellRendererPane crp = (CellRendererPane) dropdown.getComponent(1);
crp.setLayout(new GridLayout(4, 4)); // for 16 items...
但它不起作用。它仍然将单元格放在一列中。我尝试在设置LayoutManager后添加项目,但这不会影响结果
有人知道如何做到这一点吗
到目前为止,我认为ListCellRenderer没有任何用处。它只指定如何绘制单元(一次一个),而不是如何放置所有单元(它们彼此的相对位置是什么)
欢迎任何帮助
谢谢
乔丹
# 1 楼答案
组合框使用JList在弹出窗口中呈现项目。默认情况下,每个项目都显示在一行中。您可以通过以下方式直接访问此列表:
现在您已经可以访问该列表,您应该可以使用以下命令更改默认显示:
希望现在当下拉列表的宽度达到时,这些项目将被包装起来。下拉列表的宽度由组合框的宽度控制,因此您可能需要使用以下方法来调整组合框的宽度:
编辑:
实际上,忘记使用setPrototypeDisplayValue(…),我想你需要手动设置弹出窗口的大小
默认情况下,弹出窗口的宽度始终等于组合框的宽度。可以通过使用PopupMenuListener覆盖弹出窗口的大小来修改此行为。要开始学习,可以查看Combo Box Popup条目。你的代码会简单得多,因为你所需要做的就是硬编码所需的弹出窗口宽度