Buggy code:
public class EJFXStandardLovRenderer implements EJLovRenderer { final int OK_ACTION_COMMAND = 1 ; final int CANCEL_ACTION_COMMAND = 2 ; private EJItemLovController _itemToValidate ; private EJLovDisplayReason _displayReason ; protected EJLovController _lovController ; private TableView < EJDataRecord > _tableViewer ; private boolean _validate = true ; private EJFrameworkManager _frameworkManager ; private AbstractDialog _dialog ; protected EJInternalBlock _block ; private FilteredContentProvider _contentProvider ; private List < EJDataRecord > _tableBaseRecords = new ArrayList < EJDataRecord > ( ) ; public Object getGuiComponent ( ) { } public EJQueryScreenRenderer getQueryScreenRenderer ( ) { } @ Override public void refreshLovRendererProperty ( String propertyName ) { } @ Override public void refreshItemProperty ( String itemName , EJManagedScreenProperty managedItemPropertyType , EJDataRecord record ) { } @ Override public void refreshItemRendererProperty ( String itemName , String propertyName ) { } @ Override public void synchronize ( ) { } public void initialiseRenderer ( EJLovController lovController ) { } protected Node createToolbar ( ) { } protected void buildGui ( ) { } public EJLovDisplayReason getDisplayReason ( ) { } @ Override public EJDataRecord getFocusedRecord ( ) { } public void enterQuery ( EJDataRecord record ) { } @ Override public void blockCleared ( ) { } EJFXApplicationManager getFXManager ( ) { } @ Override public void displayLov ( EJItemLovController itemToValidate , EJLovDisplayReason displayReason ) { } @ Override public void refreshAfterChange ( EJDataRecord record ) { } protected void refresh ( ) { } public void recordSelected ( EJDataRecord record ) { } @ Override public int getDisplayedRecordCount ( ) { } @ Override public int getDisplayedRecordNumber ( EJDataRecord record ) { } @ Override public EJDataRecord getFirstRecord ( ) { } @ Override public EJDataRecord getLastRecord ( ) { } @ Override public EJDataRecord getRecordAt ( int displayedRecordNumber ) { } @ Override public EJDataRecord getRecordAfter ( EJDataRecord record ) { } @ Override public EJDataRecord getRecordBefore ( EJDataRecord record ) { } public void selectRow ( int selectedRow ) { } @ Override public void executingQuery ( ) { } @ Override public void queryExecuted ( ) { } void addColumns ( ObservableList < TableColumn < EJDataRecord , ? > > columns , EJItemGroupProperties groupProperties ) { } TableColumn < EJDataRecord , ? > createScreenItem ( EJCoreMainScreenItemProperties itemProps ) { if ( itemProps . isSpacerItem ( ) ) { return null ; } EJScreenItemController item = _block . getScreenItem ( MAIN , itemProps . getReferencedItemName ( ) ) ; EJManagedItemRendererWrapper renderer = item . getManagedItemRenderer ( ) ; if ( renderer != null ) { EJFrameworkExtensionProperties blockProperties = itemProps . getLovRendererRequiredProperties ( ) ; EJFXAppItemRenderer itemRenderer = ( ( EJFXAppItemRenderer ) ( renderer . getUnmanagedRenderer ( ) ) ) ; TableColumn < EJDataRecord , EJDataRecord > labelProvider = itemRenderer . createColumnProvider ( itemProps , item ) ; if ( labelProvider != null ) { String labelOrientation = blockProperties . getStringProperty ( COLUMN_ALIGNMENT ) ; if ( labelOrientation != null ) switch ( labelOrientation ) { case EJFXMultiRecordBlockDefinitionProperties . COLUMN_ALLIGN_LEFT : labelProvider . getStyleClass ( ) . add ( "ej-column-header-left" ) ; break ; case EJFXMultiRecordBlockDefinitionProperties . COLUMN_ALLIGN_RIGHT : labelProvider . getStyleClass ( ) . add ( "ej-column-header-right" ) ; break ; case EJFXMultiRecordBlockDefinitionProperties . COLUMN_ALLIGN_CENTER : labelProvider . getStyleClass ( ) . add ( "ej-column-header-center" ) ; break ; default : break ; } int displayedWidth = blockProperties . getIntProperty ( DISPLAY_WIDTH_PROPERTY , 0 ) ; if ( displayedWidth == 0 ) { if ( ( itemProps . getLabel ( ) ) != null ) displayedWidth = ( itemProps . getLabel ( ) . length ( ) ) + 2 ; else displayedWidth = 5 ; } String visualAttribute = blockProperties . getStringProperty ( VISUAL_ATTRIBUTE_PROPERTY ) ; if ( visualAttribute != null ) { EJCoreVisualAttributeProperties va = EJCoreProperties . getInstance ( ) . getVisualAttributesContainer ( ) . getVisualAttributeProperties ( visualAttribute ) ; if ( va != null ) itemRenderer . setInitialVisualAttribute ( va ) ; } labelProvider . setCellValueFactory ( new Callback < TableColumn . CellDataFeatures < EJDataRecord , EJDataRecord > , ObservableValue < EJDataRecord > > ( ) { public ObservableValue < EJDataRecord > call ( final TableColumn . CellDataFeatures < EJDataRecord , EJDataRecord > p ) { return new ObservableValue < EJDataRecord > ( ) { @ Override public void removeListener ( InvalidationListener arg0 ) { } @ Override public void addListener ( InvalidationListener arg0 ) { } @ Override public void removeListener ( ChangeListener < ? super EJDataRecord > arg0 ) { } @ Override public EJDataRecord getValue ( ) { return p . getValue ( ) ; } @ Override public void addListener ( ChangeListener < ? super EJDataRecord > arg0 ) { } } ; } } ) ; labelProvider . setId ( itemProps . getReferencedItemName ( ) ) ; labelProvider . setText ( itemProps . getLabel ( ) ) ; labelProvider . setResizable ( blockProperties . getBooleanProperty ( ALLOW_COLUMN_RESIZE , true ) ) ; labelProvider . setSortable ( blockProperties . getBooleanProperty ( ALLOW_ROW_SORTING , true ) ) ; if ( blockProperties . getBooleanProperty ( ALLOW_ROW_SORTING , true ) ) { Comparator < EJDataRecord > columnSorter = itemRenderer . getColumnSorter ( itemProps , item ) ; if ( columnSorter != null ) labelProvider . setComparator ( columnSorter ) ; } final Text text = new Text ( "A" ) ; text . snapshot ( null , null ) ; <START_BUG> double avgCharWidth = ( text . getLayoutBounds ( ) . getWidth ( ) ) + 5 ; <END_BUG> if ( avgCharWidth > 0 ) { labelProvider . setPrefWidth ( ( ( int ) ( ( displayedWidth + 1 ) * avgCharWidth ) ) ) ; } return labelProvider ; } } return null ; } }

Fix:
double avgCharWidth = text . getLayoutBounds ( ) . getWidth ( ) ;