我不敢相信这行不通。
我有一个 JList。我已将其渲染器设置如下。基本上RankingPanel
是一个带有两个标签和一个按钮的 JPanel。
topAchieverList = new JList();
topAchieverList.setCellRenderer(new 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
不可点击。单击它不会执行任何操作。
我该如何进行这项工作?
渲染器只是绘制在组件上的“橡皮图章”。它们不是实时的、交互式的组件。
看这个答案:JList 中的 JButton寻找一种可能的解决方案。实际上,您添加了一个MouseListener
给你的JList
,确定在该单击点渲染哪个特定按钮,然后以编程方式单击该按钮。
或者,你可以做一个JPanel
按钮,并将面板放在JScrollPane
.
或者,你可以制作一个单列JTable
,您可以在其中实现自定义表格单元格编辑器,如下所示:表按钮列
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)