gpt4 book ai didi

java - 如何将另一个 LayoutManager 应用于 JComboBox? (多列JComboBox尝试)

转载 作者:行者123 更新时间:2023-11-30 05:05:32 25 4
gpt4 key购买 nike

我正在尝试制作一个多列 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com