我无法相信这不起作用。
我有一个JList。我已将其渲染器设置如下。基本上RankingPanel
是一个带有两个标签和一个按钮的JPanel。
topAchieverList = new JList();
topAchieverList.setCellRenderer(new TopBottomCellRenderer());
这是我的TopBottomCellRenderer。
class TopBottomCellRenderer extends RankingPanel implements ListCellRenderer {
public TopBottomCellRenderer() {
}
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
try {
Achievers achiever = (Achievers) value;
if (achiever == null) {
return this;
}
itemRank.setText("#" + achiever.rank);
itemUnits.setText("" + achiever.units);
//this is the button that does not click
itemNameButton.setText(achiever.name);
//set bg
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
return this;
} catch (Exception e) {
e.printStackTrace();
}
return this;
}
}
列表正确呈现,但JButton
无法点击。点击它什么都不做。
我如何使这项工作?
答案 0 :(得分:4)
渲染器只是"橡皮图章"涂在组件上。它们不是实时的交互式组件。
有关一种可能的解决方案,请参阅此答案:JButton in JList。实际上,您向MouseListener
添加JList
,确定在该点击点呈现的特定按钮,然后以编程方式点击该按钮。
或者,您可以制作JPanel
按钮,并将面板放在JScrollPane
。
或者,您可以创建一个单列JTable
,您可以在其中实现自定义TableCellEditor,如下所示:Table Button Column