gpt4 book ai didi

java - TableCellEditor 设置新值时 TableCellRenderer 不改变值

转载 作者:行者123 更新时间:2023-11-30 11:16:53 25 4
gpt4 key购买 nike

我是一名软件开发学徒,必须为我的公司编写图形项目特定的配置编辑器。我使用 Apache POI 从项目的配置 excel 文件中加载数据,并将数据包装到 ConfigValue 对象中。对于不同的 ConfigValue 对象,必须有不同的单元格编辑器和渲染器...

我程序的 GUI 使用自定义 JTable 和 DefaultTableModel。表/模型中的每个值都是一个 ConfigValue,它应该针对定义的不同 ConfigType 以不同方式呈现。 (就我而言,一切正常——导入、包装、加载到表中)

但我对其中一种自定义类型的 TableCellRendererTableCellEditor 有一些问题,它们应该呈现为包含所有可能的后端实体值的 ComboBox。 ComboBox 被渲染并显示正确的起始值......但是当我将一个单元格更改为另一个 ConfigValue 时......渲染器不显示该值......(它总是更改为相同的值(编辑器值的第一个) 对于一个单元格)

谁能帮我解决我的编辑器/渲染器做错了什么?

public class ConfComboBoxCellEditor extends DefaultCellEditor {

public ConfComboBoxCellEditor(List<ConfigValue> possibleValues) {
super(new JComboBox(possibleValues.toArray()));
}

@Override
public Object getCellEditorValue() {
Object cellEditorValue = super.getCellEditorValue();
System.out.println("DEBUG - CELL EDITOR - get editor value --> " + ((ConfigValue) cellEditorValue).toString());
return cellEditorValue;
}
}


public class ConfComboBoxCellRenderer extends JComboBox<ConfigValue> implements TableCellRenderer {

public ConfComboBoxCellRenderer() {
System.out.println("NEW CELL RENDERER");
}

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
ConfComboBoxCellRenderer renderer = (ConfComboBoxCellRenderer) table.getCellRenderer(row, column);
renderer.removeAllItems();
renderer.addItem((ConfigValue) value);
renderer.setSelectedItem(value);
System.out.println("DEBUG - CELL RENDERER " + row + ", " + column + " - get cell render comp --> " + ((ConfigValue) value));
return this;
}
}

最佳答案

Can anyone help me out what I am doing wrong with my Editor/Renderer?

  • JTable support JComboBox as TableCellEditor ,为用作 TableCellEditor 的每个 JComboBoxes 设置不同的数据集没有任何问题

  • TableCellRenderer only shows, painting the value stored in DefaultTableModel ,那么 renderer.xxxXxx 中的每一行代码都是对 Swing 中渲染器概念的错误解释,适得其反并且可能是繁重的任务,渲染器不是设置/获取值的地方,从所有鼠标/键事件中触发一个新事件来自所有单元格都是可见的在 JViewport 中,加上来自 JTable/TableModel API 的内部事件,

  • 您的渲染器不是关于如何将 JComboBox 绘制为渲染组件

  • 没有 cleaver,也没有没有 SSCCE/MCVE 的细节,可短时间运行,可使用局部变量中 JTable/DefaultTableModel 的硬编码值进行编译

关于java - TableCellEditor 设置新值时 TableCellRenderer 不改变值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24654701/

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