【问题标题】:JComboBox with 4 cols and 4 rows data[][] form具有 4 列和 4 行数据 [] [] 形式的 JComboBox
【发布时间】:2013-10-28 13:12:24
【问题描述】:

在我的 Java Swing 应用程序中,我需要一个有四列四行的 JComboBox。基本上,它是一个选择颜色的组合框。当组合框折叠时,用户可以看到第一行的四列,当它展开时,用户可以看到 4x4 形式的十六种颜色。

我不确定如何设计这样的组合框布局。我可以使用渲染器,但我不确定如何实现它。我只能看到两种可能:

创建一个名为“ColorLabel”的JLabel,它绘制一个圆圈并按照其构造函数中的指定填充圆圈的颜色。

  1. 创建一个面板“ColorRowPanel”并在其中添加四个 ColorLabel。创建四个 ColorRowPanel 对象并将其设置为组合框的模型。
  2. 创建一个 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


【解决方案1】:

您不能在此处使用组合框。 Combobox 设计为在每个弹出行中包含 1 个元素。

您应该为所选行创建一个带有 4 个按钮的面板,并创建一个附加按钮来打开带有 12 个其他按钮的弹出窗口。要创建弹出窗口,请参见 javax.swing.Popup 类。

这是分步指南:

  1. 创建带有 4 个颜色切换按钮和打开按钮的面板 弹出窗口。
  2. 创建具有 12 个其他颜色按钮的面板。
  3. 将所有颜色按钮添加到 ButtonGroup
  4. 触发打开/关闭弹出窗口并将其添加到按钮以打开 弹出窗口
  5. 如果颜色按钮之一是触发关闭弹出窗口 切换并将其添加到所有颜色按钮。

【讨论】:

  • trashgod,您的创建自定义选择器面板并使用 @Sergiy 的弹出窗口给了我启动的想法。如果我在我的 CustomChooser 中使用自定义 JToggleButton,那么我想我应该在 CustomChooserPanel 本身中添加 16 个切换 btns。 Sergiy,如果我在每个面板中添加 4 个面板和 4 个 btns,那么我将如何在 4 个面板中设置仅选择 1 个切换。
  • 使用javax.swingButtonGroup 类。只需将所有按钮添加到组中,如果其中一个按钮被选中,所有其他按钮将被取消选择
  • 请检查问题的更新部分。谢谢
  • 我的答案是最新的
  • 哦,谢谢亲爱的。效果很好。只有一件事无法设置 - 在 btn 上的 mouseEnter 上,我显示弹出窗口。如果鼠标不在 ColorContainer、btn 和/或 btnsPanel 中,我想隐藏它。因此,如果鼠标不在这 3 个组件中,则将其隐藏。选择 btn 休息,它被完美地隐藏了。这三个组件的鼠标移出/退出事件的if子句怎么写??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2018-06-30
  • 1970-01-01
相关资源
最近更新 更多