2012-11-19 108 views
8

我有一个示例代码,我们用于动态行号JavaSwing表即JTable。我新到JavaFX,并想在JavaFX相同。有没有什么办法在JavaFXjavafx表中的自动行编号

class LineNumberTable extends JTable { 

      private JTable mainTable; 

      public LineNumberTable(JTable table) { 
       super(); 
       mainTable = table; 
       setAutoCreateColumnsFromModel(false); 
       setModel(mainTable.getModel()); 
       setAutoscrolls(false); 
       addColumn(new TableColumn()); 
       getColumnModel().getColumn(0).setCellRenderer(mainTable.getTableHeader().getDefaultRenderer()); 
       getColumnModel().getColumn(0).setPreferredWidth(40); 
       setPreferredScrollableViewportSize(getPreferredSize()); 

      } 

      @Override 
      public boolean isCellEditable(int row, int col) { 
       if (col == uneditableColumn) { 
        return false; 
       } 
       return bEdit; 
      } 

      @Override 
      public Object getValueAt(int row, int column) { 
       return Integer.valueOf(row + 1); 
      } 

      @Override 
      public int getRowHeight(int row) { 
       return mainTable.getRowHeight(); 
      } 
     } 
+0

你可以添加你的挥杆JTable中的截图,以明确你在做什么? –

+0

@UrsReupke请参阅此屏幕截图。 http://zss.s3.amazonaws.com/Untitled.png?AWSAccessKeyId=AKIAINHDRCMKC5GUSNFA&Expires=1361989789&Signature=DF6NRn6l4HyYHiEV3o3MHM3XMao%3D。你可以看到swing table的屏幕截图,在上面的代码生成的第一列中有行号,并且希望在javafx中也是如此。谢谢 –

回答

5

在JavaFX设置自动行号,可以使用TableColumn s的CellFactories和CellValueFactories来填充TableView

JavaFX教程有一个article可能让你开始。

在我使用的一种方法中,我将业务对象转换为显示对象并将所有必要的属性(如您的情况,数字)添加到它们中。

编辑:在第二,更简洁的方法,你可以设置你的CellFactory创建TableCell,显示了自己的index财产TableCell#updateItem(S, boolean)

public class NumberedCell extends TableCell{ 

    protected void updateItem(Object object, boolean selected){ 
    setText(String.valueOf(getIndex()); 
    } 
} 
+0

谢谢。我会尽快回复您。 –

+0

我已经添加了一些示例代码,希望这有助于。 –

+1

我相信updateItem的布尔参数是“空”而不是“选中”。没有什么大不了的,但可能会让读者感到困惑。 –