2929
3030package  org .scijava .ui .swing .widget ;
3131
32- import  javax .swing .JLabel ;
32+ import  java .io .IOException ;
33+ 
34+ import  javax .swing .JEditorPane ;
3335import  javax .swing .JPanel ;
36+ import  javax .swing .event .HyperlinkEvent ;
37+ import  javax .swing .event .HyperlinkListener ;
3438
3539import  org .scijava .Priority ;
40+ import  org .scijava .log .LogService ;
41+ import  org .scijava .platform .PlatformService ;
42+ import  org .scijava .plugin .Parameter ;
3643import  org .scijava .plugin .Plugin ;
3744import  org .scijava .widget .InputWidget ;
3845import  org .scijava .widget .MessageWidget ;
4754public  class  SwingMessageWidget  extends  SwingInputWidget <String > implements 
4855	MessageWidget <JPanel >
4956{
57+ 	@ Parameter 
58+ 	private  PlatformService  platformService ;
59+ 
60+ 	@ Parameter 
61+ 	private  LogService  logService ;
5062
51- 	private  JLabel   label ;
63+ 	private  JEditorPane   pane ;
5264
5365	// -- InputWidget methods -- 
5466
@@ -76,8 +88,28 @@ public void set(final WidgetModel model) {
7688
7789		final  String  text  = model .getText ();
7890
79- 		label  = new  JLabel (text );
80- 		getComponent ().add (label );
91+ 		pane  = new  JEditorPane ("text/html" , text );
92+ 
93+ 		// NB: use format (font etc.) from parent component 
94+ 		pane .putClientProperty (JEditorPane .HONOR_DISPLAY_PROPERTIES , Boolean .TRUE );
95+ 
96+ 		pane .setEditable (false );
97+ 		pane .setOpaque (false );
98+ 		pane .addHyperlinkListener (new  HyperlinkListener () {
99+ 
100+ 			@ Override 
101+ 			public  void  hyperlinkUpdate (HyperlinkEvent  hle ) {
102+ 				if  (HyperlinkEvent .EventType .ACTIVATED .equals (hle .getEventType ())) {
103+ 					try  {
104+ 						platformService .open (hle .getURL ());
105+ 					}
106+ 					catch  (IOException  exc ) {
107+ 						logService .error ("Error while opening "  + hle .getURL (), exc );
108+ 					}
109+ 				}
110+ 			}
111+ 		});
112+ 		getComponent ().add (pane );
81113	}
82114
83115	// -- Typed methods -- 
@@ -92,6 +124,6 @@ public boolean supports(final WidgetModel model) {
92124	@ Override 
93125	public  void  doRefresh () {
94126		// maybe dialog owner changed message content 
95- 		label .setText (get ().getText ());
127+ 		pane .setText (get ().getText ());
96128	}
97129}
0 commit comments