JavaFX TableView - 使表列的内容居中

时间:2013-09-13 09:42:04

标签: javafx center tablecolumn

我有一个很大的问题。

我尝试将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"));

最好的感谢!!!

1 个答案:

答案 0 :(得分:3)

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