2015-02-10 4 views
0

Итак ... Я пытался javafx. Я пытался изменить некоторые содержание UI (TableView в данном случае), но иногда я был немного смущен ...Различия и рекомендуемые методы для переопределения JavaFX TableCell

Если мы имеем этот пример кода:

public <S, T> TableCell<S, T> getTableCellFactory(BiFunction<T, TableCell, Node> content) { 
    return new TableCell<S, T>() { 
     @Override 
     protected void updateItem(T item, boolean empty) { 
      super.updateItem(item, empty); 
      setText(null); 
      setContentDisplay(ContentDisplay.GRAPHIC_ONLY); 
      setGraphic(null); 

      if (item != null && !empty && getTableRow() != null) { 
       setGraphic(content.apply(item, this)); 
      } 
     } 
    }; 
} 

public static final <S, T extends Object> TableColumn<S, T> getTWColumn(
     final String title, final double width, 
     Callback<TableColumn.CellDataFeatures<S, T>, ObservableValue<T>> cellValueFactory, 
     Callback<TableColumn<S, T>, TableCell<S, T>> cellFactory) { 

    TableColumn clm = new TableColumn<>(title); 
    clm.setCellValueFactory(cellValueFactory); 
    if (cellFactory != null) { 
     clm.setCellFactory(cellFactory); 
    } 
    clm.setPrefWidth(width); 

    return clm; 
} 

public ObservableList<TableColumn<T, ?>> getTableColumns() { 
    return FXCollections.observableArrayList(
      getTWColumn("columnTitle", 500.0, 
        (TableColumn.CellDataFeatures<T, T> p) -> new ReadOnlyObjectWrapper(p.getValue()), 
        (TableColumn<T, T> p) -> new FXContent().<T, T>getT_TableCellFactory() 
      ) 
    ); 
} 

Каковы разница в загрузке и исполнении между 1, 2 и 3?

1 - (TableColumn р) -> FXContent.getT_TableCellFactory()

public abstract class FXContent { 

    public static <S, T> TableCell<S, T> getT_TableCellFactory() { 
     return getTableCellFactory((item, tc) -> { 
      Text t = getBaseText(item.getSome1()); 
      t.wrappingWidthProperty().bind(tc.getTableColumn().widthProperty()); 

      return getBaseRightLayout(t); 
     }); 
    } 
} 

2 - (TableColumn р) -> новый FXContent() getT_TableCellFactory()

.
public final class FXContent { 

    public FXContent() {} 

    public <S, T> TableCell<S, T> getT_TableCellFactory() { 
     return getTableCellFactory((item, tc) -> { 
      Text t = getBaseText(item.getSome1()); 
      t.wrappingWidthProperty().bind(tc.getTableColumn().widthProperty()); 

      return getBaseRightLayout(t); 
     }); 
    } 
} 

3 - реализовано (TableColu млн р) -> this.getT_TableCellFactory()

public Interface FXContent { 

    default <S, T> TableCell<S, T> getT_TableCellFactory() { 
     return getTableCellFactory((item, tc) -> { 
      Text t = getBaseText(item.getSome1()); 
      t.wrappingWidthProperty().bind(tc.getTableColumn().widthProperty()); 

      return getBaseRightLayout(t); 
     }); 
    } 
} 

Привет.

ответ

0

Что касается 1) Перед загрузкой класса загрузчик должен сначала найти и загрузить класс, если он не был кэширован.

Номер 2) также требует, чтобы загрузчик классов выполнял свою работу, после чего создается или создается объект, и только тогда вызывается метод.

3-й вариант только вызывает метод.

+0

Спасибо. ... и исполнение? –

+0

Выполнение - это последний шаг во всех трех случаях, который является вызовом метода. Поскольку все три метода имеют одинаковый код, нет никакой разницы. – Jurgen

 Смежные вопросы

  • Нет связанных вопросов^_^