使JList中的按钮可单击

时间:2014-03-21 20:25:24

标签: java swing jbutton jlist

我无法相信这不起作用。

我有一个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无法点击。点击它什么都不做。

我如何使这项工作?

1 个答案:

答案 0 :(得分:4)

渲染器只是"橡皮图章"涂在组件上。它们不是实时的交互式组件。

有关一种可能的解决方案,请参阅此答案:JButton in JList。实际上,您向MouseListener添加JList,确定在该点击点呈现的特定按钮,然后以编程方式点击该按钮。

或者,您可以制作JPanel按钮,并将面板放在JScrollPane

或者,您可以创建一个单列JTable,您可以在其中实现自定义TableCellEditor,如下所示:Table Button Column