gpt4 book ai didi

java - JTable 设置禁用复选框查找不可编辑的单元格

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:03 28 4
gpt4 key购买 nike

我有一个带有 boolean 值列的 JTable。根据存储在模型中的状态,我将它们中的一些或全部设置为不可编辑(模型的 isCellEditable() 返回 false)。但是,这不会使 JTable boolean 渲染器将复选框渲染为对不可编辑的单元格禁用。

除了编写自定义 boolean 渲染器之外,还有其他方法可以实现这一点吗?

如果我需要编写自己的渲染器,除了 JCheckbox 之外,我应该扩展什么类?我只需要在渲染前禁用复选框,不想实现所有渲染代码并处理选定的外观和内容。

最佳答案

However this does not make the JTable boolean renderer to render the checkboxes as disabled for uneditable cell.

这是正确的,因为它是默认渲染器的行为:JCheckBox 不可编辑但未禁用

Is there a way how to achive this other than writing custom boolean renderer?

没有,据我所知。

If I need to write my own renderer what class should I extend other than JCheckbox?

不必扩展任何类来实现 TableCellRenderer界面。您可以完美地将 JCheckBox 作为渲染器的类成员。实际上,组合优于继承。

I just simply need to disable the checkbox before rendering and do not want to implement all the rendering code and handle selected look and stuff.

这并不难,您可以控制发生的事情。考虑以下示例:

class CheckBoxCellRenderer implements TableCellRenderer {

private final JCheckBox renderer;

public CheckBoxCellRenderer() {
renderer = new JCheckBox();
renderer.setHorizontalAlignment(SwingConstants.CENTER);
}

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Color bg = isSelected ? table.getSelectionBackground() : table.getBackground();
renderer.setBackground(bg);
renderer.setEnabled(table.isCellEditable(row, column));
renderer.setSelected(value != null && (Boolean)value);
return renderer;
}
}

有关相关问题,请参阅此问答:JXTable: use a TableCellEditor and TableCellRenderer for a specific cell instead of the whole column

关于java - JTable 设置禁用复选框查找不可编辑的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26502655/

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