2011-10-25 55 views
0

我有空TableModel。当我将这个模型设置为JTable时,它没有行。我想创建一个空行,用户可以在组合框编辑器中选择值。如果用户选择非空值,则添加第二行,并在模型中有一个对象。如何在模型中没有对象的情况下添加空行?如何通过编辑JTable行来添加表格模型值?

+0

难道你不能只是将一行添加到TableModel?也许你应该发布一些代码,因为这个问题并不完全清楚。并且看一下名为[DefaultTableModel]的TableModel的实现(http://download.oracle.com/javase/1.5.0/docs/api/javax/swing/table/DefaultTableModel.html#addRow(java.lang.String)。目的[]))。 – styfle

回答

4

为TableModel是你的朋友:实现它的setValueAt方法来设置值后添加一行。下面是通过子类化DefaultTableModel来实现此目的的一个示例:

DefaultTableModel model = new DefaultTableModel(1, 3) { 

     /** 
     * @inherited <p> 
     */ 
     @Override 
     public void setValueAt(Object aValue, int row, int column) { 
      super.setValueAt(aValue, row, column); 
      if (shouldAddRow(row, column)) { 
       addRow(new Object[] {}); 
      } 
     } 

     private boolean shouldAddRow(int lastEditedRow, int lastEditedColumn) { 
      // implement your logic here 
      return lastEditedRow == getRowCount() -1; 
     } 


    }; 
+0

for SubClassing + 1 – mKorbel

+0

@mKorbel这是纯粹的懒惰(正如你所知道的,我不是一个很好的子类化粉丝:-) - 在TableModelListener中做同样的事情意味着要正确地从给定的TableModelEvent中解开“更新”,这是我讨厌的没有SwingX TableUtils手头 – kleopatra

+0

同意,简单地说,这个魔术盒非常简单和漂亮地恢复:-) – mKorbel

2
I want to create one empty row, where user can select value in combo box editor. 

是不空行,

可以空值添加到JTable细胞,更在教程的JTableJComboBox as an Editor,和实例here

+1

TableModel的值很可能是空的(又名:返回空值) - 此时只有组合的弹出窗口具有值!= null(如果我正确理解OP,则不会继续:-) – kleopatra