首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TableCellRenderer在TableCellEditor设置新值时不更改值

TableCellRenderer在TableCellEditor设置新值时不更改值
EN

Stack Overflow用户
提问于 2014-07-09 13:13:04
回答 1查看 845关注 0票数 2

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

我的程序的图形用户界面使用自定义的JTable和DefaultTableModel。表/模型中的每个值都是一个ConfigValue,对于定义的不同的ConfigTypes,应该以不同的方式呈现。(据我所知,所有工作-导入、包装、加载到表中)

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

有人能帮我解决我的编辑器/渲染者做错了什么吗?

代码语言:javascript
复制
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;
   }
}
EN

回答 1

Stack Overflow用户

发布于 2014-07-09 13:40:01

有人能帮我解决我的编辑器/渲染者做错了什么吗?

  • JTable支持JComboBox作为TableCellEditor,为每个用作TableCellEditor的JComboBoxes设置不同的数据集没有任何问题。
  • TableCellRenderer只显示,绘制存储在DefaultTableModel中的值,那么renderer.xxxXxx中的每一行代码都在Swing中错误地解释了渲染器的概念,结果适得其反,并且可能是繁重的任务,渲染器不是设置/getValue的位置,一个新的事件是从所有鼠标/键事件中触发的,所有单元格中的键事件都可以在JViewport中看到,再加上来自JTable/TableModel的内部事件,
  • 您的渲染器不是关于如何将JComboBox绘制为呈现组件
  • 在局部变量中,JTable/DefaultTableModel没有任何切割器,也没有没有SSCCE/MCVE、可短运行、可用硬编码值编译的细节
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24654701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档