gpt4 book ai didi

java - 自定义 Java ListCellRenderer - 无法单击 JCheckBox

转载 作者:行者123 更新时间:2023-12-02 08:32:50 25 4
gpt4 key购买 nike

制作了一个自定义 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,其中的每个单元格都使用上述类呈现,但无法单击每个单元格面板中的复选框。认为这与没有获得焦点有关。有什么想法吗?

谢谢,斯宾塞

最佳答案

您的自定义渲染器只是管理 JList 内容的外观,而不添加任何功能,例如修改组件的能力(复选框) - 将其简单地想象为用于依次显示每个列表单元格的橡皮图章。

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

  1. 使用单列 JTable 而不是 JList。
  2. 通过对 AbstractTableModel 进行子类化并重写 getColumnClass(int) 来定义定制的 TableModel 实现,以返回第 0 列的 Boolean.class。请注意,默认呈现器现在会将其呈现为 JCheckBox。但是,它不会是您需要的带标签的 JCheckBox。
  3. 为 boolean 值添加定制的 TableCellRenderer;例如myTable.setCellRenderer(Boolean.class, new MyLabelledCheckBoxRenderer());
  4. 添加 boolean 编辑器,使用类似于:myTable.setCellEditor(Boolean.class, new DefaultEditor(new JCheckBox("Is Enabled)));

关于java - 自定义 Java ListCellRenderer - 无法单击 JCheckBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2833070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com