Buggy code:
public class Snippet226 { public static void main ( String [ ] args ) { final Display display = new Display ( ) ; Shell shell = new Shell ( display ) ; shell . setText ( "Custom<seq2seq4repair_space>gradient<seq2seq4repair_space>selection<seq2seq4repair_space>for<seq2seq4repair_space>Tree" ) ; shell . setLayout ( new FillLayout ( ) ) ; final Tree tree = new Tree ( shell , ( ( SWT . MULTI ) | ( SWT . FULL_SELECTION ) ) ) ; tree . setHeaderVisible ( true ) ; tree . setLinesVisible ( true ) ; int columnCount = 4 ; for ( int i = 0 ; i < columnCount ; i ++ ) { TreeColumn column = new TreeColumn ( tree , SWT . NONE ) ; column . setText ( ( "Column<seq2seq4repair_space>" + i ) ) ; } int itemCount = 3 ; for ( int i = 0 ; i < itemCount ; i ++ ) { TreeItem item1 = new TreeItem ( tree , SWT . NONE ) ; item1 . setText ( ( "item<seq2seq4repair_space>" + i ) ) ; for ( int c = 1 ; c < columnCount ; c ++ ) { item1 . setText ( c , ( ( ( ( "item<seq2seq4repair_space>[" + i ) + "-" ) + c ) + "]" ) ) ; } for ( int j = 0 ; j < itemCount ; j ++ ) { TreeItem item2 = new TreeItem ( item1 , SWT . NONE ) ; item2 . setText ( ( ( ( ( "item<seq2seq4repair_space>[" + i ) + "<seq2seq4repair_space>" ) + j ) + "]" ) ) ; for ( int c = 1 ; c < columnCount ; c ++ ) { item2 . setText ( c , ( ( ( ( ( ( "item<seq2seq4repair_space>[" + i ) + "<seq2seq4repair_space>" ) + j ) + "-" ) + c ) + "]" ) ) ; } for ( int k = 0 ; k < itemCount ; k ++ ) { TreeItem item3 = new TreeItem ( item2 , SWT . NONE ) ; item3 . setText ( ( ( ( ( ( ( "item<seq2seq4repair_space>[" + i ) + "<seq2seq4repair_space>" ) + j ) + "<seq2seq4repair_space>" ) + k ) + "]" ) ) ; for ( int c = 1 ; c < columnCount ; c ++ ) { item3 . setText ( c , ( ( ( ( ( ( ( ( "item<seq2seq4repair_space>[" + i ) + "<seq2seq4repair_space>" ) + j ) + "<seq2seq4repair_space>" ) + k ) + "-" ) + c ) + "]" ) ) ; } } } } tree . addListener ( EraseItem , new Listener ( ) { public void handleEvent ( Event event ) { if ( ( ( event . detail ) & ( SWT . SELECTED ) ) != 0 ) { GC gc = event . gc ; Rectangle area = tree . getClientArea ( ) ; int columnCount = tree . getColumnCount ( ) ; if ( ( ( event . index ) == ( columnCount - 1 ) ) || ( columnCount == 0 ) ) { int width = ( ( area . x ) + ( area . width ) ) - ( event . x ) ; if ( width > 0 ) { Region region = new Region ( ) ; gc . getClipping ( region ) ; region . add ( event . x , event . y , width , event . height ) ; gc . setClipping ( region ) ; region . dispose ( ) ; } } gc . setAdvanced ( true ) ; if ( gc . getAdvanced ( ) ) gc . setAlpha ( 127 ) ; Rectangle rect = event . getBounds ( ) ; Color foreground = gc . getForeground ( ) ; Color background = gc . getBackground ( ) ; gc . setForeground ( display . getSystemColor ( COLOR_RED ) ) ; gc . setBackground ( display . getSystemColor ( COLOR_LIST_BACKGROUND ) ) ; <START_BUG> gc . fillGradientRectangle ( 0 , rect . y , area . width , rect . height , false ) ; <END_BUG> gc . setForeground ( foreground ) ; gc . setBackground ( background ) ; event . detail &= ~ ( SWT . SELECTED ) ; } } } ) ; for ( int i = 0 ; i < columnCount ; i ++ ) { tree . getColumn ( i ) . pack ( ) ; } tree . setSelection ( tree . getItem ( 0 ) ) ; shell . setSize ( 500 , 200 ) ; shell . open ( ) ; while ( ! ( shell . isDisposed ( ) ) ) { if ( ! ( display . readAndDispatch ( ) ) ) display . sleep ( ) ; } display . dispose ( ) ; } }

Fix:
gc . fillGradientRectangle ( 0 , rect . y , display . getBounds ( ) . width , rect . height , false ) ;