创建一个Interactable JList

时间:2014-06-16 21:28:37

标签: java swing jlist

许多人可能知道,JList中的组件不可交互(您无法与它们交互),它们就像组件外观中的快照一样。我正在处理一个简单的应用程序,JList就是我想要的,除了列表中的组件应该是可交互的。

到目前为止,我已经通过实现一个简单的AbstractListModel和ListCellRenderer创建了这个:

screenshot

JList中的每个组件都是JPanel,正如您所看到的,它包含其他组件,如JProgressBar,JLable和JButton。唯一的问题是按钮(和所有其他组件)不可交互。我该如何解决这个问题?

注意:我不想要一个列JTable!

2 个答案:

答案 0 :(得分:1)

我认为你自己回答,JList是不可编辑的,它不是设计成并试图改造它,是一项艰苦的工作(是的,我实际上已经尝试过了)。

您“可以”使用MouseListener上的JList,找到点击的行,将MouseEvent翻译为ListCellRenderer的上下文Component并尝试确定点击的内容......但是,这又是一项额外的工作,可以通过其他方式更轻松地实现......

考虑使用布局生成垂直对齐的组件列表,例如,可以从SwingX VerticalLayoutBoxLayout生成

答案 1 :(得分:1)

将来为此人添加此答案。 我只是遇到了完全相同的问题,使用JListListCellRenderer非常好,如果你只需要自定义渲染的项目,但不是完全功能的组件。

这就是我所做的并且有所作为:

panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

然后当我有动态组装面板所需的信息列表时:

public void build(List<Item> items){
    panel.removeAll();
    for(Item item: items){
        panel.add(new ItemEntry(item));
    }
}

将您的面板包裹在JScrollPane中,就像之前所有控件现在都能正常运行一样:)。