2013-09-13 3 views
3

У меня большая проблема.JavaFX TableView - Центрировать содержимое столбца таблицы

Я пытаюсь сосредоточить содержимое TableColumn в TableView.

Я уже пробовал все, что нашел в сети, но на самом деле ничего из этого не сработало!

Есть ли у кого эта проблема была? любые решения?

Надежды на помощь!

Edit:

Ну, я был в состоянии центрировать содержимое статической ячейки с этим кодом:

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

Но содержание должно поступать из базы данных, и я действительно не ВГ ни малейшего представления о том, как получить данные из ObservableList объекта, который я использую в методе TABLEVIEWNAME.setItems ...

я впервые использовал этот код:

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

но не было возможности сосредоточиться на этом контенте!

Пожалуйста, кто-нибудь может мне помочь?

Edit:

Благодаря этому большой ответ, я сделал это!

код ниже:

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

ЛУЧШИЙ СПАСИБО !!!

+0

Редактировать ваш вопрос, чтобы включить информацию о том, что вы пытались и в какой среде вы работаете в. – jewelsea

ответ

3

CellValueFactory и CellFactory - это две разные вещи. CellValueFactory используется для указания, откуда берутся значения, в то время как CellFactory указывает, как они отображаются.

Используйте оба устройства одновременно. Но в коде setCellFactory вы должны не do 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; 
     } 
    } 
); 
+0

Хорошо ... Я Newby в JFX так, где я должен объявить updateItem() метод ?? Реально не знаю – downdrown

+0

Должен ли я сделать это в своей организации «TvAccounting»? – downdrown

+0

В этом суть. Вам не нужно объявлять updateItem(). Он должен работать, просто удалив код setText выше. UpdateItem - это внутренний метод в TableCell. Вам нужно будет только переопределить его, если вы пишете собственную реализацию TableCell. Это не ваше дело. – Rasha