许多人可能知道,JList中的组件不可交互(您无法与它们交互),它们就像组件外观中的快照一样。我正在处理一个简单的应用程序,JList就是我想要的,除了列表中的组件应该是可交互的。
到目前为止,我已经通过实现一个简单的AbstractListModel和ListCellRenderer创建了这个:
JList中的每个组件都是JPanel,正如您所看到的,它包含其他组件,如JProgressBar,JLable和JButton。唯一的问题是按钮(和所有其他组件)不可交互。我该如何解决这个问题?
注意:我不想要一个列JTable!
答案 0 :(得分:1)
我认为你自己回答,JList
是不可编辑的,它不是设计成并试图改造它,是一项艰苦的工作(是的,我实际上已经尝试过了)。
您“可以”使用MouseListener
上的JList
,找到点击的行,将MouseEvent
翻译为ListCellRenderer
的上下文Component
并尝试确定点击的内容......但是,这又是一项额外的工作,可以通过其他方式更轻松地实现......
考虑使用布局生成垂直对齐的组件列表,例如,可以从SwingX VerticalLayout
或BoxLayout
生成
答案 1 :(得分:1)
将来为此人添加此答案。
我只是遇到了完全相同的问题,使用JList
和ListCellRenderer
非常好,如果你只需要自定义渲染的项目,但不是完全功能的组件。
这就是我所做的并且有所作为:
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
中,就像之前所有控件现在都能正常运行一样:)。