Java swing JTree、JTable或JList中的活动元素

Java swing JTree、JTable或JList中的活动元素,java,swing,jtree,jlist,Java,Swing,Jtree,Jlist,我需要一个容器,上面有类似的JPanels,一个在另一个下面排列,可以选择。我可以: 使用带有自定义渲染器的JList,但是那些JPanels将是被动元素,这不是我想要的 使用“active”JPanels实现我自己的容器,但这些容器是不可选择的。或者他们可以选择吗? 也许可以使用MouseListener和访问系统默认选择的背景色,但这似乎有点太费劲了 在自定义单元格编辑器中使用JTable或JTree呈现“活动”的JPanel。但这些活动部件只会在“第二次”单击时做出反应,首先激活编辑器,其

我需要一个容器,上面有类似的
JPanel
s,一个在另一个下面排列,可以选择。我可以:

  • 使用带有自定义渲染器的
    JList
    ,但是那些
    JPanel
    s将是被动元素,这不是我想要的
  • 使用“active”
    JPanel
    s实现我自己的容器,但这些容器是不可选择的。或者他们可以选择吗? 也许可以使用
    MouseListener
    和访问系统默认选择的背景色,但这似乎有点太费劲了
  • 在自定义单元格编辑器中使用
    JTable
    JTree
    呈现“活动”的
    JPanel
    。但这些活动部件只会在“第二次”单击时做出反应,首先激活编辑器,其次执行
    JPanel
    的实际操作。这也是不可接受的

  • 为了获得更直观的印象,下面是一个示例,说明这可能意味着什么:


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

    正如您所发现的,简单地将
    JPanel
    放在
    JList
    中并不能像您所希望的那样工作。
    JPanel
    将是被动的,不会接收事件-基本上所有发生的事情都是您的
    JPanel
    只是被绘制出来的,它不是一个活动的组件

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

      • 也许你的问题我不太清楚


        有一个
        TableColumn
        ,但没有
        TableHeader
        ,其中包含活动的
        JComponents
        (您可以为所有JComponents实现)as,我不确定是否理解您的“示例”。如果您想要两个功能按钮,那么使用一个JTable,其中包含的功能按钮是独立的列。然后,您的数据将显示在其他列中


        展示了如何做到这一点。

        “。有点太费劲了”有时程序员不得不放下咖啡和甜甜圈&实际上是程序(这并不是说我不想这样做。但我更喜欢在现有的基础上构建而不是重写已有内容的解决方案。关于3)何时或是否开始编辑取决于CellRenderer的实现:根据需要实现isCellEditable(EventObject)。这是我的第二点。完全失去了项目的可选择性。