自定义Java ListCellRenderer-无法单击JCheckBox [英] Custom Java ListCellRenderer - Can't click JCheckBox

查看:81
本文介绍了自定义Java ListCellRenderer-无法单击JCheckBox的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

制作了一个自定义ListCellRenderer:

Made a custom ListCellRenderer:

import java.awt.Component;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;

/**
 *
 * @author Spencer
 */
public class TaskRenderer implements ListCellRenderer {

    private Task task;

    private JPanel panel = new JPanel();
    private JCheckBox checkbox = new JCheckBox();
    private JLabel label = new JLabel();

    public TaskRenderer() {
        panel.add(checkbox);
        panel.add(label);
    }

    public Component getListCellRendererComponent(
            JList list,
            Object value,
            int index,
            boolean isSelected,
            boolean cellHasFocus) {
        task = (Task) value;
        label.setText(task.getName());
        return panel;
    }

}

具有一个JList,其中的每个单元格都是使用上述类呈现的,但是无法单击面板中每个单元格的复选框.以为它与它没有得到关注有关.有什么想法吗?

Have a JList with each cell in it rendered using the above class, but the checkboxes in the panels for each cell cannot be clicked. Thought it had to do with it not getting focus. Any ideas?

谢谢,斯宾塞

推荐答案

您的自定义渲染器只是在控制JList内容的外观,而不添加任何功能,例如修改组件的功能(复选框)-想象一下作为用来依次显示每个列表单元格的橡皮图章.

Your custom renderer is simply governing the appearance of the JList contents, not adding any functionality such as the ability to modify the components (check box) - Imagine it simply as a rubber stamp used to display each list cell in turn.

我建议通过以下方式解决问题:

I'd recommend solving the problem by:

  1. 使用单列JTable而不是JList.
  2. 通过子类化AbstractTableModel定义一个定制的TableModel实现,并重写getColumnClass(int)以返回第0列的Boolean.class.请注意,默认呈现器现在会将其呈现为JCheckBox.但是,它不会像您所要求的那样标记为JCheckBox.
  3. 为布尔添加定制的TableCellRenderer;例如myTable.setCellRenderer(Boolean.class,新的MyLabelledCheckBoxRenderer());
  4. 使用类似于以下内容的方法添加布尔值编辑器:myTable.setCellEditor(Boolean.class,new DefaultEditor(new JCheckBox("Is Enabled)));

这篇关于自定义Java ListCellRenderer-无法单击JCheckBox的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆