- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个多列 JComboBox。我环顾四周,这似乎是一件非常棘手的事情。除非很多人,否则我对拥有一个表格(在其中选择一行)不感兴趣:我需要消除 JComboBox 中的滚动条,为了实现这一点,我想将其项目放在多列中列出而不是仅将它们放在一列中。
到目前为止,我最好的选择是这样做:
JComboBox dropdown = new JComboBox(validValues);
CellRendererPane crp = (CellRendererPane) dropdown.getComponent(1);
crp.setLayout(new GridLayout(4, 4)); // for 16 items...
但是这不起作用。它仍然将单元格放置在一列中。我尝试在设置LayoutManager后添加项目,但这并不影响结果。
有人知道如何实现这一目标吗?
到目前为止,我认为 ListCellRenderer 没什么用处。它只指定如何绘制一个单元格(一次一个),而不指定如何放置所有单元格(它们彼此之间的相对位置是什么)。
欢迎任何帮助!
谢谢!
乔丹
最佳答案
组合框使用 JList 来呈现弹出窗口中的项目。默认情况下,每个项目显示在一行中。您可以直接使用以下方式访问此列表:
Object child = comboBox.getAccessibleContext().getAccessibleChild(0);
BasicComboPopup popup = (BasicComboPopup)child;
JList list = popup.getList();
既然您可以访问该列表,您应该可以使用以下方法更改默认显示:
list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
希望当达到下拉列表的宽度时,项目现在能够换行。下拉列表的宽度由组合框的宽度控制,因此您可能需要使用以下方法来调整组合框的宽度:
list.setPrototypeDisplayValue(....);
编辑:
实际上,忘记使用 setPrototypeDisplayValue(...),我认为您需要手动设置弹出窗口的大小。
默认情况下,弹出窗口的宽度始终等于组合框的宽度。您可以通过使用 PopupMenuListener 来覆盖弹出窗口的大小来修改此行为。要开始使用,您可以查看 Combo Box Popup入口。您的代码将变得更加简单,因为您所需要做的就是对弹出窗口的所需宽度进行硬编码。
关于java - 如何将另一个 LayoutManager 应用于 JComboBox? (多列JComboBox尝试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5225025/
我是一名优秀的程序员,十分优秀!