Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使JList中的按钮可单击_Java_Swing_Jbutton_Jlist - Fatal编程技术网

Java 使JList中的按钮可单击

Java 使JList中的按钮可单击,java,swing,jbutton,jlist,Java,Swing,Jbutton,Jlist,我不敢相信这不管用 我有一个JList。我将其渲染器设置如下。基本上,RankingPanel是一个带有两个标签和一个按钮的JPanel topAchieverList = new JList(); topAchieverList.setCellRenderer(new TopBottomCellRenderer()); 这是我的上衣 class TopBottomCellRenderer extends RankingPanel implements ListCellRenderer {

我不敢相信这不管用

我有一个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
中添加一个
MouseListener
,确定在该单击点呈现哪个特定按钮,然后以编程方式单击该按钮

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


或者,您可以制作一个单列
JTable
,在这里您可以实现一个定制的TableCellEditor,如下所示:

,因此基本上不可能。有一些“骇客”的方式迫使它发生。。。最后,我将我所有的
RankingPanel
对象添加到了一个
JPanel
,并将其添加到了一个“JScrollPane”。谢谢你的帮助。