Buggy code:
public Point computeSize ( int wHint , int hHint , boolean changed ) { } void createHandle ( ) { } void createItem ( TableColumn column , int index ) { } void createItem ( TableItem item , int index ) { } void createWidget ( ) { } Color defaultBackground ( ) { } Color defaultForeground ( ) { } void deregister ( ) { } public void deselect ( int index ) { } public void deselect ( int start , int end ) { } public void deselect ( int [ ] indices ) { } public void deselectAll ( ) { } void destroyItem ( TableColumn column ) { } void destroyItem ( TableItem item ) { } void drawInteriorWithFrame_inView ( int id , int sel , int cellFrame , int view ) { NSRect rect = new NSRect ( ) ; OS . memmove ( rect , cellFrame , sizeof ) ; NSTableView tableView = ( ( NSTableView ) ( this . view ) ) ; NSBrowserCell cell = new NSBrowserCell ( id ) ; NSRange rowsRange = tableView . rowsInRect ( rect ) ; int rowIndex = ( ( int ) ( rowsRange . location ) ) ; TableItem item = items [ rowIndex ] ; int columnIndex = 0 ; if ( ( columnCount ) != 0 ) { NSIndexSet columnsSet = tableView . columnIndexesInRect ( rect ) ; int index = ( ( int ) ( columnsSet . firstIndex ( ) ) ) ; NSArray nsColumns = tableView . tableColumns ( ) ; id nsColumn = nsColumns . objectAtIndex ( index ) ; for ( int i = 0 ; i < ( columnCount ) ; i ++ ) { if ( ( columns [ i ] . nsColumn . id ) == ( nsColumn . id ) ) { columnIndex = indexOf ( columns [ i ] ) ; break ; } } } Color background = ( ( item . cellBackground ) != null ) ? item . cellBackground [ columnIndex ] : null ; if ( background == null ) background = item . background ; boolean drawBackground = background != null ; boolean drawForeground = true ; boolean isSelected = tableView . isRowSelected ( rowIndex ) ; boolean drawSelection = isSelected ; NSColor nsSelectionBackground = null ; NSColor nsSelectionForeground = null ; if ( isSelected ) { if ( isFocusControl ( ) ) { nsSelectionForeground = NSColor . alternateSelectedControlTextColor ( ) ; } else { nsSelectionForeground = NSColor . selectedControlTextColor ( ) ; } nsSelectionForeground = nsSelectionForeground . colorUsingColorSpace ( NSColorSpace . deviceRGBColorSpace ( ) ) ; nsSelectionBackground = cell . highlightColorInView ( tableView ) ; nsSelectionBackground = nsSelectionBackground . colorUsingColorSpace ( NSColorSpace . deviceRGBColorSpace ( ) ) ; } NSRect fullRect = new NSRect ( ) ; fullRect . x = rect . x ; fullRect . y = rect . y ; fullRect . height = rect . height ; if ( ( columnCount ) == 0 ) { if ( ( item . customWidth ) != ( - 1 ) ) { fullRect . width = item . customWidth ; } else { NSSize contentSize = cell . cellSizeForBounds ( rect ) ; fullRect . width = ( ( int ) ( contentSize . width ) ) ; } } else { NSSize spacing = tableView . intercellSpacing ( ) ; fullRect . width = ( rect . width ) + ( spacing . width ) ; } if ( hooks ( EraseItem ) ) { NSRect eraseItemRect = null ; if ( ( ( columnIndex == 0 ) && ( ( ( style ) & ( SWT . CHECK ) ) != 0 ) ) && ( ( ( columnCount ) == 0 ) || ( ( tableView . columnWithIdentifier ( columns [ 0 ] . nsColumn ) ) == 1 ) ) ) { eraseItemRect = new NSRect ( ) ; eraseItemRect . y = fullRect . y ; <START_BUG> eraseItemRect . width = ( fullRect . width ) + ( checkColumn . width ( ) ) ; <END_BUG> eraseItemRect . height = fullRect . height ; } else { eraseItemRect = fullRect ; } GCData data = new GCData ( ) ; data . paintRect = eraseItemRect ; GC gc = GC . cocoa_new ( this , data ) ; gc . setFont ( item . getFont ( columnIndex ) ) ; if ( isSelected ) { float [ ] components = new float [ ( ( int ) ( nsSelectionForeground . numberOfComponents ( ) ) ) ] ; nsSelectionForeground . getComponents ( components ) ; Color selectionForeground = Color . cocoa_new ( display , components ) ; gc . setForeground ( selectionForeground ) ; components = new float [ ( ( int ) ( nsSelectionBackground . numberOfComponents ( ) ) ) ] ; nsSelectionBackground . getComponents ( components ) ; Color selectionBackground = Color . cocoa_new ( display , components ) ; gc . setBackground ( selectionBackground ) ; } else { gc . setForeground ( item . getForeground ( columnIndex ) ) ; gc . setBackground ( item . getBackground ( columnIndex ) ) ; } Event event = new Event ( ) ; event . item = item ; event . gc = gc ; event . index = columnIndex ; event . detail = SWT . FOREGROUND ; if ( drawBackground ) event . detail |= SWT . BACKGROUND ; if ( isSelected ) event . detail |= SWT . SELECTED ; event . x = ( ( int ) ( eraseItemRect . x ) ) ; event . y = ( ( int ) ( eraseItemRect . y ) ) ; event . width = ( ( int ) ( eraseItemRect . width ) ) ; event . height = ( ( int ) ( eraseItemRect . height ) ) ; sendEvent ( EraseItem , event ) ; gc . dispose ( ) ;

Fix:
eraseItemRect . width = ( fullRect . x ) + ( fullRect . width ) ;