【发布时间】:2013-10-28 13:12:24
【问题描述】:
在我的 Java Swing 应用程序中,我需要一个有四列四行的 JComboBox。基本上,它是一个选择颜色的组合框。当组合框折叠时,用户可以看到第一行的四列,当它展开时,用户可以看到 4x4 形式的十六种颜色。
我不确定如何设计这样的组合框布局。我可以使用渲染器,但我不确定如何实现它。我只能看到两种可能:
创建一个名为“ColorLabel”的JLabel,它绘制一个圆圈并按照其构造函数中的指定填充圆圈的颜色。
- 创建一个面板“ColorRowPanel”并在其中添加四个 ColorLabel。创建四个 ColorRowPanel 对象并将其设置为组合框的模型。
- 创建一个 4x4 的
JTable并在每个单元格中添加 ColorLabel。将JTable设置为JComboBox的模型。
这有可能吗?如果是这样,我应该在哪个对象中添加我的 ColorRowPanels/JTable 以设置为模型? And when a color is selected, I should be able to know which colorLabel or which row-col is selected to get the color selected by user.
更新 谢谢。根据您的指导,我开始了。
1) 创建了一个 JToggleButton 类型的类 ColorButton - 只是为按钮创建一个形状。没有更多的实施。代码取自here
2) 创建了一个扩展 AbstractColorChooserPanel 的类 ColorContainer。创建了一个包含 4 个 btns 的面板,并将 4 个这样的面板添加到类中。还为面板的每个按钮实现了 ButtonGroup。如CrayonPanel 所示设计 - 在 buildChooser() 中添加了我的 initComponents()。构造函数为空。其余所有抽象方法现在都是空的。
3) 向 JCC 添加面板,使用 JDialog.createDialog 可以显示 ColorContainer。它来得很好,只是我不想要确定、取消、重置 btns。我在 JCC 类或网络上没有找到任何隐藏 JCC dlg 按钮面板的选项。
4) 为了对 Panel 进行同样的尝试,我让 ColorContainer 扩展了 JPanel 而不是 AbsColorChooserPanel,并在 Popup 中显示 ColorContainer,它显示得非常好。
我还不能解决两件事 - 1) MAIN - 我想要这样的结果:
第一部分显示下拉菜单何时折叠,第二部分显示。无论下拉菜单是否显示或折叠,您都会看到第一个面板仍然可见。
到目前为止我得到的是:我添加了一个 JLAbel 并在 mouseEnter 事件中显示了弹出窗口。
我怎样才能达到我想要的结果?想不出办法来实现它。
2) 是否可以隐藏 JColorChooser 的 btns 并得到我期望的结果!!
请指导我并帮助我。
【问题讨论】:
-
然后不要忘记在 BasicComboBoxPopup 中将 ListSelectionListener 添加到 JTable 中,否则您将(可能)从选择中丢失事件
-
#trashgod,请查看对 Sergiy 回答的评论。
标签: java swing jpanel render jcombobox