【问题标题】:Automatic row numbering in javafx tablejavafx表中的自动行编号
【发布时间】:2012-11-07 03:11:54
【问题描述】:

我有一个示例代码,用于在JavaSwing 表中动态行号,即JTable。我是JavaFX 的新手,并且想在JavaFX 中也一样。有没有办法在JavaFX表中设置自动行号

 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();
            }
        }

【问题讨论】:

  • 您能否添加您的 Swing JTable 的屏幕截图以明确您的目标?
  • @UrsReupke 请参考此屏幕截图。 zss.s3.amazonaws.com/…。你可以看到swing table的屏幕截图,在上面的代码生成的第一列中有行号,并且希望在javafx中也是如此。谢谢

标签: java swing javafx-2


【解决方案1】:

在 JavaFX 中,您可以将 TableColumns 与 CellFactories 和 CellValueFactories 一起使用来填充您的 TableView

JavaFX 教程有一个 article 可能会帮助您入门。

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

编辑:在第二种更简洁的方法中,您可以将 CellFactory 设置为创建一个 TableCell,在 TableCell#updateItem(S, boolean) 中显示其自己的 index 属性:

public class NumberedCell extends TableCell{

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

【讨论】:

  • 谢谢。我会回复你的。
  • 我相信 updateItem 的布尔参数是“空的”而不是“选定的”。没什么大不了的,但可能会让读者感到困惑。
  • 另外一个 @Override 注释也是合理的——而且,为了语法正确,在 setText() ... ;) 处加上右括号
猜你喜欢
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 2016-07-26
相关资源
最近更新 更多