【问题标题】:Swing JTable reset TableCellEditorSwing JTable 重置 TableCellEditor
【发布时间】:2011-08-26 16:15:01
【问题描述】:

JComboBox in TableCellEditor 记住不同行甚至不同TableModels 中最后选择的值。例如,在一行中选择一个值,然后转到另一行,开始单元格编辑,JComboBox 将在前一行中将最后一个选择值作为其当前值。

如何解决?

【问题讨论】:

  • 听起来很不寻常(如:问题出在您未显示的代码中),来个可运行的小示例演示该问题怎么样?

标签: java swing jtable tablecelleditor


【解决方案1】:

getTableCellEditorComponent(..) 方法中设置值。

例子:

public static void main(String... args) {

    JFrame frame = new JFrame("Test");

    JTable table = new JTable(10, 2);
    JComboBox box = new JComboBox(new String[] {"A", "B", "C"});
    table.setDefaultEditor(Object.class, new DefaultCellEditor(box) {

        @Override
        public Component getTableCellEditorComponent(JTable table,
                Object value, boolean isSelected, int row, int column) {
            return super.getTableCellEditorComponent(
                        table, 
                        table.getValueAt(Math.max(row-1, 0), column), 
                        isSelected, 
                        row, 
                        column);
        }
    });

    frame.add(table);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
}

【讨论】:

  • 你甚至没有尝试过,是吗?因为这是完全错误的 - 编辑器(或渲染器)不应该事后猜测调用者的值。
  • 确实很有趣 - 得到了什么(尝试时)?顺便说一句,你能重现原来的问题吗?如果是这样,使用哪个 jdk 版本(我依稀记得 1.2 前后的一些奇怪的 init 错误 ;-)
  • 诺诺,我不认为他/她在谈论“错误”。他/她希望行为是这样的......
  • 啊……阅读再阅读,可能是。真是一个奇怪的要求;-)
  • 改变了我的投票:+1 表示仔细阅读和邪恶的创造力:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2012-02-26
  • 2014-05-31
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多