eclipse - How to display a hint message in an SWT StyledText -


swt text has method called setmessage() can used display message hint user, indicating purpose of field.

it seems styledtext not have setmessage() method. can similar done styledtext nonetheless?

recently, had need display hint within styledtext. share solution here.

the setmessage() method of styledtextmessage shown below can used display hint on styledtext widget. class adds paint listener draw message text , several listeners , display filters redraw message whenever may invalidated.

public class styledtextmessage {    public static void main( string[] args ) {     display display = new display();     shell shell = new shell( display );     shell.setlayout( new filllayout() );     styledtext styledtext2 = new styledtext( shell, swt.border );     button button = new button( shell, swt.push );     button.settext( "push button" );     new styledtextmessage( styledtext2 ).setmessage( "please enter stylish..." );     shell.setsize( 600, 600 );     shell.open();     while( !shell.isdisposed() ) {       if( !display.readanddispatch() )         display.sleep();     }     display.dispose();   }    private static final int margin = 2;   private static int[] invalidate_events = { swt.activate, swt.deactivate, swt.show, swt.hide };    private final styledtext styledtext;   private final listener invalidatelistener;   private final color textcolor;   private string message;   private int verticaloffsetlines;    public styledtextmessage( styledtext styledtext ) {     this.styledtext = objects.requirenonnull( styledtext );     this.invalidatelistener = this::handleinvalidatedevent;     this.textcolor = gettextcolor();     this.message = "";     initialize();   }    public void setmessage( string message ) {     this.message = objects.requirenonnull( message );     this.styledtext.redraw();   }    public boolean ismessageshowing() {     return !message.isempty() && styledtext.getcontent().getcharcount() == 0;   }    private void initialize() {     styledtext.addlistener( swt.paint, this::handlepaintevent );     styledtext.addlistener( swt.resize, event -> styledtext.redraw() );     styledtext.addlistener( swt.dispose, this::handledispose );     for( int eventtype : invalidate_events ) {       styledtext.getdisplay().addfilter( eventtype, invalidatelistener );     }   }    private color gettextcolor() {     return styledtext.getdisplay().getsystemcolor( swt.color_gray );   }    private void handlepaintevent( event event ) {     if( ismessageshowing() ) {       drawhint( event.gc, event.x, event.y );     }   }    private void handledispose( event event ) {     for( int eventtype : invalidate_events ) {       styledtext.getdisplay().removefilter( eventtype, invalidatelistener );     }   }    private void handleinvalidatedevent( event event ) {     styledtext.redraw();   }    private void drawhint( gc gc, int x, int y ) {     int verticaloffset = verticaloffsetlines * gc.getfontmetrics().getheight();     gc.setforeground( textcolor );     gc.drawtext( message, x + margin, y + margin - verticaloffset, swt.draw_delimiter | swt.draw_transparent );   }  } 

Comments

Popular posts from this blog

sql - invalid in the select list because it is not contained in either an aggregate function -

Angularjs unit testing - ng-disabled not working when adding text to textarea -

How to start daemon on android by adb -