3

我有一个大问题。

我尝试将 TableColumn 的内容集中在 TableView 中。

我已经尝试了我在网上找到的所有东西,但实际上没有任何效果!

有没有人有/有同样的问题?任何解决方案?

希望得到帮助!

编辑:

好吧,我能够使用以下代码将静态单元格的内容居中:

tc_customer.setCellFactory(new Callback<TableColumn<TvAccounting, String>, TableCell<TvAccounting, String>>() {
                @Override
                public TableCell<TvAccounting, String> call(TableColumn<TvAccounting, String> p) {
                    TableCell<TvAccounting, String> tc = new TableCell<TvAccounting, String>();
                    tc.setAlignment(Pos.CENTER);
                    tc.setText("SOMETEXT");
                    return tc;
                }
            });

但是内容应该来自数据库,我真的不知道如何从我在TABLEVIEWNAME.setItems方法中使用的 ObservableList 对象中获取数据......

我第一次使用这段代码:

tc_customer.setCellValueFactory(new PropertyValueFactory<TvAccounting, String>("Customer"));

但是没有办法使内容居中!

请问有人可以帮我吗?

编辑:

感谢这个伟大的答案,我做到了!

下面的代码:

tc_customer.setCellFactory(new Callback<TableColumn<TvAccounting, String>, TableCell<TvAccounting, String>>() {
                @Override
                public TableCell<TvAccounting, String> call(TableColumn<TvAccounting, String> p) {
                    TableCell<TvAccounting, String> tc = new TableCell<TvAccounting, String>(){
                        @Override
                        public void updateItem(String item, boolean empty) {
                            if (item != null){
                                setText(item);
                            }
                        }
                    };
                    tc.setAlignment(Pos.CENTER);
                    return tc;
                }
            });

            tc_customer.setCellValueFactory(new PropertyValueFactory<TvAccounting, String>("Customer"));

非常感谢!!!

4

1 回答 1

5

CellValueFactory 和 CellFactory 是两个不同的东西。CellValueFactory 用于指定值的来源,而 CellFactory 指定它们如何显示。

同时使用两者。但是在setCellFactory 代码中你不应该这样setText。设置文本将由方法TableCell内的代码updateItem()处理。此方法将使用从“ cellValueFactory ”提供的值,并负责将其设置在自己的标签内。

tc_customer.setCellFactory(
   new Callback< TableColumn<TvAccounting, String>,
                 TableCell<TvAccounting, String>>()
   {
      @Override public TableCell<TvAccounting, String>
      call(TableColumn<TvAccounting, String> p) {
         TableCell<TvAccounting, String> tc =
            new TableCell<TvAccounting, String>();
         tc.setAlignment(Pos.CENTER);
         // tc.setText("SOMETEXT"); This line should be removed
         return tc;
      }
   }
);
于 2013-09-13T11:52:42.493 回答