2011-08-24 81 views
1

JComboBox in TableCellEditor记住上一个不同行之间的选定值,甚至不同的TableModels。例如,在一行上选择一个值,然后转到另一行,开始单元格编辑,并且JComboBox将具有前一行的前一个选择值作为其当前值。Swing JTable reset TableCellEditor

它如何修复?

+1

声音异常(如:问题是在你没有显示的代码),怎么样一个小的可运行例子来展示的问题? – kleopatra

回答

3

设置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); 
} 
+0

你甚至没有尝试过,是吗?因为这显然是错误的 - 编辑(也不是渲染器)不应该猜测来电者的价值。 – kleopatra

+0

@kleopatra:当然这个要求很有趣,但我试过了... – dacwe

+0

确实很有趣 - 并且得到了什么(尝试时)?顺便说一句,你能重现原来的问题吗?如果是这样,使用哪个jdk版本(我隐约记得1.2时代的一些奇怪的初始化bug ;-) – kleopatra