【问题标题】:Active Elements in swing JTree, JTable or JListswing JTree、JTable 或 JList 中的活动元素
【发布时间】:2011-08-31 21:38:07
【问题描述】:

我需要一个具有相似JPanels 的容器,一个排列在另一个下方,可以选择。我可以:

  1. JList 与自定义渲染器一起使用,但那些JPanels 将是被动元素,这不是我想要的。
  2. 使用“活动”JPanels 实现我自己的容器,但这些容器无法选择。或者他们可以选择吗? 也许MouseListener 和访问系统默认选定背景颜色可能是一种方法,但似乎有点太费劲了
  3. 使用JTableJTree 与自定义单元格编辑器呈现“活动”JPanel。但是这些活动部分只会在“第二次”点击时做出反应,首先是激活编辑器,其次是执行JPanel 的实际操作。这也是不可接受的。

为了获得更直观的印象,以下是这可能意味着什么的示例:

一个 JList 包含列表项,每个列表项都有两个功能 JButtons

【问题讨论】:

  • "..有点太费劲了" 有时程序员不得不放下咖啡和甜甜圈并实际编程。 :(
  • 我不想不这样做。但我更喜欢可以在现有事物上构建而不是重写已有事物的解决方案。
  • 关于3)何时或是否开始编辑取决于CellRenderer的实现:根据需要实现isCellEditable(EventObject)

标签: java swing jtree jlist


【解决方案1】:

正如您所发现的,简单地将JPanel 放入JList 并不能如您所愿。 JPanel 将是被动的并且不会接收事件 - 基本上所有正在发生的事情是你的 JPanel 只是被绘制,它不是一个活的组件。

不要使用JList 将面板放入列表中,而是使用类似列表的布局管理器,例如BoxLayoutGridLayout。如果您希望所有面板的大小相同,请使用 GridLayout 并仅包含一列。

【讨论】:

  • 这是我的第二点。并且完全缺少项目的可选择性。
【解决方案2】:

我不确定我是否理解您的“示例”。如果您想要两个功能按钮,则使用包含功能按钮的 JTable 是单独的列。然后您的数据将显示在其他列中。

Table Button Column 展示了如何做到这一点。

【讨论】:

    【解决方案3】:

    你的问题我不清楚,可能是here

    JTable,有一个TableColumn,但没有TableHeader,包含JPanel,内部有活动的JComponents(您可以为所有JComponents实现TableCellEditor)为JComboBoxJButtonJTextField

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 2012-11-20
      • 1970-01-01
      • 2011-01-09
      相关资源
      最近更新 更多