java - 如何将监听器添加到 Java Swing 中的复选框列表

标签 java swing jlist jcheckbox listcellrenderer

我试图从这里的实现中为每个复选框添加一个监听器:How do I make a list with checkboxes in Java Swing? ,但不确定要实现哪个接口(interface)。有人有什么建议吗?

public class CheckBoxList extends JList {
    protected Border noFocusBorder =
            new EmptyBorder(1, 1, 1, 1);

    public CheckBoxList() {
        setCellRenderer(new CellRenderer());
        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e){
                int index = locationToIndex(e.getPoint());
                if (index != -1) {
                    JCheckBox checkbox = (JCheckBox)
                            getModel().getElementAt(index);
                    checkbox.setSelected(
                            !checkbox.isSelected());
                    repaint();
                }
            }
        });
        setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    }
    //adds checkboxes..
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public void addCheckbox(JCheckBox checkBox) {
        ListModel currentList = this.getModel();
        JCheckBox[] newList = new JCheckBox[currentList.getSize() + 1];
        for (int i = 0; i < currentList.getSize(); i++) {
            newList[i] = (JCheckBox) currentList.getElementAt(i);
        }
        newList[newList.length - 1] = checkBox;
        setListData(newList);
    }
    @SuppressWarnings("rawtypes")
    protected class CellRenderer implements ListCellRenderer {
        public Component getListCellRendererComponent(
                @SuppressWarnings("rawtypes") JList list, Object value, int index,
                boolean isSelected, boolean cellHasFocus) {
            JCheckBox checkbox = (JCheckBox) value;
            checkbox.setBackground(isSelected ?
                    getSelectionBackground() : getBackground());
            checkbox.setForeground(isSelected ?
                    getSelectionForeground() : getForeground());
            checkbox.setEnabled(isEnabled());
            checkbox.setFont(getFont());
            checkbox.setFocusPainted(false);
            checkbox.setBorderPainted(true);
            checkbox.setBorder(isSelected ?
                    UIManager.getBorder(
                            "List.focusCellHighlightBorder") : noFocusBorder);
            return checkbox;
        }
    }
}

最佳答案

如@MadProgrammer 的评论中所建议并显示 here , herehere ,您可以使用 JTable 作为 View 并将 Boolean 值存储在相应的 TableModel 中。

image

关于java - 如何将监听器添加到 Java Swing 中的复选框列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23374707/

相关文章:

java - 如何向 JPanel 添加多个 JComponent?

java - 在 JFrame 中显示 Excel 工作表

java - 将 JList 添加到 JPanel

Java:从列表选择监听器获取结果

java - Saxon XQuery 内存管理

javascript - 正确配置 vert.x 服务器以允许跨域资源共享 (CORS)

java - Tomcat 7 和 Oracle 连接池

java - 捕获空字符串。使用哪个异常?

java - 扩展和 super 的通用概念

java - 通过单击列表上的项目填充文本区域