示例#1
0
 /**
  * Sets the receiver's text.
  *
  * <p>The string can contain both regular text and hyperlinks. A hyperlink is delimited by an
  * anchor tag, &lt;A&gt; and &lt;/A&gt;. Within an anchor, a single HREF attribute is supported.
  * When a hyperlink is selected, the text field of the selection event contains either the text of
  * the hyperlink or the value of its HREF, if one was specified. In the rare case of identical
  * hyperlinks within the same string, the HREF attribute can be used to distinguish between them.
  * The string may include the mnemonic character and line delimiters. The only delimiter the HREF
  * attribute supports is the quotation mark (").
  *
  * <p>Mnemonics are indicated by an '&amp;' that causes the next character to be the mnemonic. The
  * receiver can have a mnemonic in the text preceding each link. When the user presses a key
  * sequence that matches the mnemonic, focus is assigned to the link that follows the text.
  * Mnemonics in links and in the trailing text are ignored. On most platforms, the mnemonic
  * appears underlined but may be emphasised in a platform specific manner. The mnemonic indicator
  * character '&amp;' can be escaped by doubling it in the string, causing a single '&amp;' to be
  * displayed.
  *
  * @param string the new text
  * @exception IllegalArgumentException
  *     <ul>
  *       <li>ERROR_NULL_ARGUMENT - if the text is null
  *     </ul>
  *
  * @exception SWTException
  *     <ul>
  *       <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  *       <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  *     </ul>
  */
 public void setText(String string) {
   checkWidget();
   if (string == null) error(SWT.ERROR_NULL_ARGUMENT);
   if (string.equals(text)) return;
   text = string;
   layout.setText(parse(string));
   focusIndex = offsets.length > 0 ? 0 : -1;
   selection.x = selection.y = -1;
   boolean enabled = (state & DISABLED) == 0;
   TextStyle linkStyle = new TextStyle(null, enabled ? linkColor : disabledColor, null);
   linkStyle.underline = true;
   int[] bidiSegments = new int[offsets.length * 2];
   for (int i = 0; i < offsets.length; i++) {
     Point point = offsets[i];
     layout.setStyle(linkStyle, point.x, point.y);
     bidiSegments[i * 2] = point.x;
     bidiSegments[i * 2 + 1] = point.y + 1;
   }
   layout.setSegments(bidiSegments);
   TextStyle mnemonicStyle = new TextStyle(null, null, null);
   mnemonicStyle.underline = true;
   for (int i = 0; i < mnemonics.length; i++) {
     int mnemonic = mnemonics[i];
     if (mnemonic != -1) {
       layout.setStyle(mnemonicStyle, mnemonic, mnemonic);
     }
   }
   redraw();
 }