⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utilities.java

📁 gcc的组建
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
   */  public static final int getNextWord(JTextComponent c, int offs)      throws BadLocationException  {    if (offs < 0 || offs > (c.getText().length() - 1))      throw new BadLocationException("invalid offset specified", offs);    String text = c.getText();    BreakIterator wb = BreakIterator.getWordInstance();    wb.setText(text);    int last = wb.following(offs);    int current = wb.next();    while (current != BreakIterator.DONE)      {        for (int i = last; i < current; i++)          {            // FIXME: Should use isLetter(int) and text.codePointAt(int)            // instead, but isLetter(int) isn't implemented yet            if (Character.isLetter(text.charAt(i)))              return last;          }        last = current;        current = wb.next();      }    return BreakIterator.DONE;  }  /**   * Finds the start of the previous word for the given offset.   *    * @param c   *          the text component   * @param offs   *          the offset in the document   * @return the location in the model of the start of the previous word.   * @throws BadLocationException   *           if the offset is invalid.   */  public static final int getPreviousWord(JTextComponent c, int offs)      throws BadLocationException  {    if (offs < 0 || offs > (c.getText().length() - 1))      throw new BadLocationException("invalid offset specified", offs);    String text = c.getText();    BreakIterator wb = BreakIterator.getWordInstance();    wb.setText(text);    int last = wb.preceding(offs);    int current = wb.previous();    while (current != BreakIterator.DONE)      {        for (int i = last; i < offs; i++)          {            // FIXME: Should use isLetter(int) and text.codePointAt(int)            // instead, but isLetter(int) isn't implemented yet            if (Character.isLetter(text.charAt(i)))              return last;          }        last = current;        current = wb.previous();      }    return 0;  }    /**   * Finds the start of a word for the given location.   * @param c the text component   * @param offs the offset location   * @return the location of the word beginning   * @throws BadLocationException if the offset location is invalid   */  public static final int getWordStart(JTextComponent c, int offs)      throws BadLocationException  {    if (offs < 0 || offs >= c.getText().length())      throw new BadLocationException("invalid offset specified", offs);        String text = c.getText();    BreakIterator wb = BreakIterator.getWordInstance();    wb.setText(text);    if (wb.isBoundary(offs))      return offs;    return wb.preceding(offs);  }    /**   * Finds the end of a word for the given location.   * @param c the text component   * @param offs the offset location   * @return the location of the word end   * @throws BadLocationException if the offset location is invalid   */  public static final int getWordEnd(JTextComponent c, int offs)      throws BadLocationException  {    if (offs < 0 || offs >= c.getText().length())      throw new BadLocationException("invalid offset specified", offs);        String text = c.getText();    BreakIterator wb = BreakIterator.getWordInstance();    wb.setText(text);    return wb.following(offs);  }    /**   * Get the model position of the end of the row that contains the    * specified model position.  Return null if the given JTextComponent   * does not have a size.   * @param c the JTextComponent   * @param offs the model position   * @return the model position of the end of the row containing the given    * offset   * @throws BadLocationException if the offset is invalid   */  public static final int getRowEnd(JTextComponent c, int offs)      throws BadLocationException  {    String text = c.getText();    if (text == null)      return -1;    // Do a binary search for the smallest position X > offs    // such that that character at positino X is not on the same    // line as the character at position offs    int high = offs + ((text.length() - 1 - offs) / 2);    int low = offs;    int oldHigh = text.length() + 1;    while (true)      {        if (c.modelToView(high).y != c.modelToView(offs).y)          {            oldHigh = high;            high = low + ((high + 1 - low) / 2);            if (oldHigh == high)              return high - 1;          }        else          {            low = high;            high += ((oldHigh - high) / 2);            if (low == high)              return low;          }      }  }        /**   * Get the model position of the start of the row that contains the specified   * model position. Return null if the given JTextComponent does not have a   * size.   *    * @param c the JTextComponent   * @param offs the model position   * @return the model position of the start of the row containing the given   *         offset   * @throws BadLocationException if the offset is invalid   */  public static final int getRowStart(JTextComponent c, int offs)      throws BadLocationException  {    String text = c.getText();    if (text == null)      return -1;    // Do a binary search for the greatest position X < offs    // such that the character at position X is not on the same    // row as the character at position offs    int high = offs;    int low = 0;    int oldLow = 0;    while (true)      {        if (c.modelToView(low).y != c.modelToView(offs).y)          {            oldLow = low;            low = high - ((high + 1 - low) / 2);            if (oldLow == low)              return low + 1;          }        else          {            high = low;            low -= ((low - oldLow) / 2);            if (low == high)              return low;          }      }  }    /**   * Determine where to break the text in the given Segment, attempting to find   * a word boundary.   * @param s the Segment that holds the text   * @param metrics the font metrics used for calculating the break point   * @param x0 starting view location representing the start of the text   * @param x the target view location   * @param e the TabExpander used for expanding tabs (if this is null tabs   * are expanded to 1 space)   * @param startOffset the offset in the Document of the start of the text   * @return the offset at which we should break the text   */  public static final int getBreakLocation(Segment s, FontMetrics metrics,                                           int x0, int x, TabExpander e,                                           int startOffset)  {    int mark = Utilities.getTabbedTextOffset(s, metrics, x0, x, e, startOffset);    BreakIterator breaker = BreakIterator.getWordInstance();    breaker.setText(s.toString());        // If mark is equal to the end of the string, just use that position    if (mark == s.count)      return mark;        // Try to find a word boundary previous to the mark at which we     // can break the text    int preceding = breaker.preceding(mark + 1);        if (preceding != 0)      return preceding;    else      // If preceding is 0 we couldn't find a suitable word-boundary so      // just break it on the character boundary      return mark;  }  /**   * Returns the paragraph element in the text component <code>c</code> at   * the specified location <code>offset</code>.   *   * @param c the text component   * @param offset the offset of the paragraph element to return   *   * @return the paragraph element at <code>offset</code>   */  public static final Element getParagraphElement(JTextComponent c, int offset)  {    Document doc = c.getDocument();    Element par = null;    if (doc instanceof StyledDocument)      {        StyledDocument styledDoc = (StyledDocument) doc;        par = styledDoc.getParagraphElement(offset);      }    else      {        Element root = c.getDocument().getDefaultRootElement();        int parIndex = root.getElementIndex(offset);        par = root.getElement(parIndex);      }    return par;  }  /**   * Returns the document position that is closest above to the specified x   * coordinate in the row containing <code>offset</code>.   *   * @param c the text component   * @param offset the offset   * @param x the x coordinate   *   * @return  the document position that is closest above to the specified x   *          coordinate in the row containing <code>offset</code>   *   * @throws BadLocationException if <code>offset</code> is not a valid offset   */  public static final int getPositionAbove(JTextComponent c, int offset, int x)    throws BadLocationException  {    View rootView = c.getUI().getRootView(c);    Rectangle r = c.modelToView(offset);    int offs = c.viewToModel(new Point(x, r.y));    int pos = rootView.getNextVisualPositionFrom(c, offs,                                                 Position.Bias.Forward,                                                 SwingConstants.NORTH,                                                 new Position.Bias[1]);    return pos;  }  /**   * Returns the document position that is closest below to the specified x   * coordinate in the row containing <code>offset</code>.   *   * @param c the text component   * @param offset the offset   * @param x the x coordinate   *   * @return  the document position that is closest above to the specified x   *          coordinate in the row containing <code>offset</code>   *   * @throws BadLocationException if <code>offset</code> is not a valid offset   */  public static final int getPositionBelow(JTextComponent c, int offset, int x)    throws BadLocationException  {    View rootView = c.getUI().getRootView(c);    Rectangle r = c.modelToView(offset);    int offs = c.viewToModel(new Point(x, r.y));    int pos = rootView.getNextVisualPositionFrom(c, offs,                                                 Position.Bias.Forward,                                                 SwingConstants.SOUTH,                                                 new Position.Bias[1]);    return pos;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -