Java 类java.awt.FontMetrics 实例源码

项目:LivroJavaComoProgramar10Edicao    文件:MetricsJPanel.java   
@Override
public void paintComponent(Graphics g)
{
   super.paintComponent(g); 

   g.setFont(new Font("SansSerif", Font.BOLD, 12));
   FontMetrics metrics = g.getFontMetrics();
   g.drawString("Current font: " + g.getFont(), 10, 30);
   g.drawString("Ascent: " + metrics.getAscent(), 10, 45);
   g.drawString("Descent: " + metrics.getDescent(), 10, 60);
   g.drawString("Height: " + metrics.getHeight(), 10, 75);
   g.drawString("Leading: " + metrics.getLeading(), 10, 90);

   Font font = new Font("Serif", Font.ITALIC, 14);
   metrics = g.getFontMetrics(font);
   g.setFont(font);
   g.drawString("Current font: " + font, 10, 120);
   g.drawString("Ascent: " + metrics.getAscent(), 10, 135);
   g.drawString("Descent: " + metrics.getDescent(), 10, 150);
   g.drawString("Height: " + metrics.getHeight(), 10, 165);
   g.drawString("Leading: " + metrics.getLeading(), 10, 180);
}
项目:jdk8u-jdk    文件:BasicLabelUI.java   
private String layout(JLabel label, FontMetrics fm,
                      int width, int height) {
    Insets insets = label.getInsets(null);
    String text = label.getText();
    Icon icon = (label.isEnabled()) ? label.getIcon() :
                                      label.getDisabledIcon();
    Rectangle paintViewR = new Rectangle();
    paintViewR.x = insets.left;
    paintViewR.y = insets.top;
    paintViewR.width = width - (insets.left + insets.right);
    paintViewR.height = height - (insets.top + insets.bottom);
    paintIconR.x = paintIconR.y = paintIconR.width = paintIconR.height = 0;
    paintTextR.x = paintTextR.y = paintTextR.width = paintTextR.height = 0;
    return layoutCL(label, fm, text, icon, paintViewR, paintIconR,
                    paintTextR);
}
项目:openjdk-jdk10    文件:bug8132119.java   
private static void checkNullArgumentsGetStringWidth(JComponent comp,
        String text) {

    FontMetrics fontMetrics = comp.getFontMetrics(comp.getFont());
    BasicGraphicsUtils.getStringWidth(null, fontMetrics, text);
    float result = BasicGraphicsUtils.getStringWidth(comp, fontMetrics, null);

    if (result != 0) {
        throw new RuntimeException("The string length is not 0");
    }

    try {
        BasicGraphicsUtils.getStringWidth(comp, null, text);
    } catch (NullPointerException e) {
        return;
    }

    throw new RuntimeException("NPE is not thrown");
}
项目:incubator-netbeans    文件:ListCompletionView.java   
private void renderHtml(Fix f, Graphics g, Font defaultFont, Color defaultColor,
int width, int height, boolean selected) {
    if (icon != null) {
        // The image of the ImageIcon should already be loaded
        // so no ImageObserver should be necessary
        g.drawImage(ImageUtilities.icon2Image(icon), BEFORE_ICON_GAP, (height - icon.getIconHeight()) /2, this);
    }
    int iconWidth = BEFORE_ICON_GAP + icon.getIconWidth() + AFTER_ICON_GAP;
    int textEnd = width - AFTER_ICON_GAP - subMenuIcon.getIconWidth() - AFTER_TEXT_GAP;
    FontMetrics fm = g.getFontMetrics(defaultFont);
    int textY = (height - fm.getHeight())/2 + fm.getHeight() - fm.getDescent();

    // Render left text
    if (textEnd > iconWidth) { // any space for left text?
        HtmlRenderer.renderHTML(f.getText(), g, iconWidth, textY, textEnd, textY,
            defaultFont, defaultColor, HtmlRenderer.STYLE_TRUNCATE, true);//, selected);
    }

    if (HintsControllerImpl.getSubfixes(f).iterator().hasNext()) {
        paintArrowIcon(g, textEnd + AFTER_TEXT_GAP, (height - subMenuIcon.getIconHeight()) /2);
    }
}
项目:jdk8u-jdk    文件:KerningLeak.java   
private static void leak() {
    Map<TextAttribute, Object> textAttributes = new HashMap<>();
    textAttributes.put(TextAttribute.FAMILY, "Sans Serif");
    textAttributes.put(TextAttribute.SIZE, 12);
    textAttributes.put(TextAttribute.KERNING, TextAttribute.KERNING_ON);
    Font font = Font.getFont(textAttributes);
    JLabel label = new JLabel();
    int dummy = 0;
    for (int i = 0; i < 500; i++) {
        if (i % 10 == 0) System.out.println("Starting iter " + (i+1));
        for (int j = 0; j <1000; j++) {
            FontMetrics fm = label.getFontMetrics(font);
            dummy += SwingUtilities.computeStringWidth(fm, Integer.toString(j));
        }
    }
    System.out.println("done " + dummy);
}
项目:sumo    文件:BinaryDilation.java   
/**
 * Performs binary dilation.
 */
public void renderChar(FontMetrics fontMetrics, BufferedImage image, char c, int safetyMargin) {
    BufferedImage copy = new BufferedImage(image.getWidth(), image.getHeight(), image.getType());
    copy.getGraphics().drawImage(image, 0, 0, null);
    Graphics2D g = (Graphics2D) image.getGraphics();
    g.setColor(maskColor);

    for(int x=maskSize/2; x < image.getWidth()-maskSize/2; x++) {
        for(int y=maskSize/2; y < image.getHeight()-maskSize/2; y++) {

            if(PixelReplacer.INT_ARGBhasColor(copy.getRGB(x, y))) {
                for(int j=0;j<maskSize;j++) {
                    for(int k=0;k<maskSize;k++) {
                        g.drawLine(x+j-maskSize/2, y+k-maskSize/2, x+j-maskSize/2, y+k-maskSize/2);
                    }
                }
            }

        }
    }

}
项目:OpenJSharp    文件:AquaTabbedPaneContrastUI.java   
protected void paintTitle(final Graphics2D g2d, final Font font, final FontMetrics metrics, final Rectangle textRect, final int tabIndex, final String title) {
    final View v = getTextViewForTab(tabIndex);
    if (v != null) {
        v.paint(g2d, textRect);
        return;
    }

    if (title == null) return;

    final Color color = tabPane.getForegroundAt(tabIndex);
    if (color instanceof UIResource) {
        g2d.setColor(getNonSelectedTabTitleColor());
        if (tabPane.getSelectedIndex() == tabIndex) {
            boolean pressed = isPressedAt(tabIndex);
            boolean enabled = tabPane.isEnabled() && tabPane.isEnabledAt(tabIndex);
            Color textColor = getSelectedTabTitleColor(enabled, pressed);
            Color shadowColor = getSelectedTabTitleShadowColor(enabled);
            AquaUtils.paintDropShadowText(g2d, tabPane, font, metrics, textRect.x, textRect.y, 0, 1, textColor, shadowColor, title);
            return;
        }
    } else {
        g2d.setColor(color);
    }
    g2d.setFont(font);
    SwingUtilities2.drawString(tabPane, g2d, title, textRect.x, textRect.y + metrics.getAscent());
}
项目:scorekeeperfrontend    文件:DriverTable.java   
@Override
public void paint(Graphics g1)
{
    Graphics2D g = (Graphics2D)g1;

    Dimension size = getSize();
    g.setColor(getBackground());
    g.fillRect(0, 0, size.width, size.height);
    g.setColor(new Color(40,40,40));

    //FontMetrics tm = g.getFontMetrics(topFont);
    FontMetrics bm = g.getFontMetrics(bottomFont);

    if (topLine != null)
    {
        g.setFont(topFont);
        g.drawString(topLine, 5, size.height/2 - 2);
    }
    if (bottomLine != null)
    {
        g.setFont(bottomFont);
        g.drawString(bottomLine, 5, size.height/2 + bm.getHeight() - 2);
    }
}
项目:rekit-game    文件:GameGridImpl.java   
/**
 * The implementation of
 * {@link #drawText(Vec, String, TextOptions, boolean)}.
 *
 * @param pos
 *            same as in base method
 * @param text
 *            same as in base method
 * @param options
 *            same as in base method
 */
private void drawTextImpl(Vec pos, String text, TextOptions options) {
    // Set color to red and set font
    RGBAColor in = options.getColor();
    RGBAColor col = (!options.getUseFilter() || this.filter == null || !this.filter.isApplyPixel()) ? in : this.filter.apply(in);
    this.graphics.setColor(this.calcRGBA(col));

    Font font = new Font(options.getFont(), options.getFontOptions(), options.getHeight());
    this.graphics.setFont(font);
    FontMetrics metrics = this.graphics.getFontMetrics(font);

    float x = pos.x;
    float y = pos.y;
    float xAlign = options.getAlignment().x;
    float yAlign = options.getAlignment().y;
    for (String line : text.split("\n")) {
        Dimension offset = this.getTextOffset(line, metrics);
        this.graphics.drawString(line, //
                (x + xAlign * offset.width), //
                (y += metrics.getHeight()) + yAlign * offset.height);
    }

}
项目:parabuild-ci    文件:MarkerAxisBand.java   
/**
 * A utility method that draws a string inside a rectangle.
 *
 * @param g2  the graphics device.
 * @param bounds  the rectangle.
 * @param font  the font.
 * @param text  the text.
 */
private void drawStringInRect(Graphics2D g2, Rectangle2D bounds, Font font,
                              String text) {

    g2.setFont(font);
    FontMetrics fm = g2.getFontMetrics(font);
    Rectangle2D r = TextUtilities.getTextBounds(text, g2, fm);
    double x = bounds.getX();
    if (r.getWidth() < bounds.getWidth()) {
        x = x + (bounds.getWidth() - r.getWidth()) / 2;
    }
    LineMetrics metrics = font.getLineMetrics(
        text, g2.getFontRenderContext()
    );
    g2.drawString(
        text, (float) x, (float) (bounds.getMaxY() 
            - this.bottomInnerGap - metrics.getDescent())
    );
}
项目:incubator-netbeans    文件:QueryTableCellRenderer.java   
private static String computeFitText(JLabel label) {
    String text = label.getText();
    if(text == null) text = "";
    if (text.length() <= VISIBLE_START_CHARS + 3) return text;

    Icon icon = label.getIcon();
    int iconWidth = icon != null ? icon.getIconWidth() : 0;

    FontMetrics fm = label.getFontMetrics(label.getFont());
    int width = label.getSize().width - iconWidth;

    String sufix = "...";                                                   // NOI18N
    int sufixLength = fm.stringWidth(sufix);
    int desired = width - sufixLength;
    if (desired <= 0) return text;

    for (int i = 0; i <= text.length() - 1; i++) {
        String prefix = text.substring(0, i);
        int swidth = fm.stringWidth(prefix);
        if (swidth >= desired) {
            return prefix.length() > 0 ? prefix + sufix: text;
        }
    }
    return text;
}
项目:openjdk-jdk10    文件:bug8132119.java   
private static void testStringWidth() {

        String str = "12345678910\u036F";
        JComponent comp = createComponent(str);
        Font font = comp.getFont();
        FontMetrics fontMetrics = comp.getFontMetrics(font);
        float stringWidth = BasicGraphicsUtils.getStringWidth(comp, fontMetrics, str);

        if (stringWidth == fontMetrics.stringWidth(str)) {
            throw new RuntimeException("Numeric shaper is not used!");
        }

        if (stringWidth != getLayoutWidth(str, font, NUMERIC_SHAPER)) {
            throw new RuntimeException("Wrong text width!");
        }
    }
项目:incubator-netbeans    文件:ColorEditor.java   
/** Paints the current value. Implements <code>ProepertyEditor</code> interface. */
public void paintValue(Graphics g, Rectangle rectangle) {
    int px;

    ((Graphics2D)g).setRenderingHints (getHints ());

    if (this.superColor != null) {
        Color color = g.getColor();
        g.drawRect(rectangle.x, rectangle.y + rectangle.height / 2 - 5 , 10, 10);
        g.setColor(this.superColor);
        g.fillRect(rectangle.x + 1, rectangle.y + rectangle.height / 2 - 4 , 9, 9);
        g.setColor(color);
        px = 18;
    }
    else px = 0;

    FontMetrics fm = g.getFontMetrics();
    g.drawString(getAsText(), rectangle.x + px, rectangle.y +
                  (rectangle.height - fm.getHeight()) / 2 + fm.getAscent());
}
项目:incubator-netbeans    文件:TaskListTable.java   
@Override
public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column ) {

    super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column );

    int availableWidth = table.getColumnModel().getColumn( column ).getWidth();
    availableWidth -= table.getIntercellSpacing().getWidth();
    Insets borderInsets = getBorder().getBorderInsets( (Component)this );
    availableWidth -= (borderInsets.left + borderInsets.right);
    String cellText = getText();
    FontMetrics fm = getFontMetrics( getFont() );

    if( fm.stringWidth(cellText) > availableWidth ) {
        setToolTipText( cellText );

    } else {
        setToolTipText( null );
    }

    return this;
}
项目:parabuild-ci    文件:SubCategoryAxis.java   
/**
 * Returns the maximum of the relevant dimension (height or width) of the 
 * subcategory labels.
 * 
 * @param g2  the graphics device.
 * @param edge  the edge.
 * 
 * @return The maximum dimension.
 */
private double getMaxDim(Graphics2D g2, RectangleEdge edge) {
    double result = 0.0;
    g2.setFont(this.subLabelFont);
    FontMetrics fm = g2.getFontMetrics();
    Iterator iterator = this.subCategories.iterator();
    while (iterator.hasNext()) {
        Comparable subcategory = (Comparable) iterator.next();
        String label = subcategory.toString();
        Rectangle2D bounds = TextUtilities.getTextBounds(label, g2, fm);
        double dim = 0.0;
        if (RectangleEdge.isLeftOrRight(edge)) {
            dim = bounds.getWidth();   
        }
        else {  // must be top or bottom
            dim = bounds.getHeight();
        }
        result = Math.max(result, dim);
    }   
    return result;
}
项目:Tarski    文件:mxUtils.java   
/**
 * Returns the font metrics of the static font graphics instance
 * 
 * @param font The font whose metrics are to be returned
 * @return the font metrics of the specified font
 */
public static FontMetrics getFontMetrics(Font font) {
  if (fontGraphics != null) {
    return fontGraphics.getFontMetrics(font);
  }

  return null;
}
项目:jdk8u-jdk    文件:Utilities.java   
static final int getTabbedTextOffset(View view, Segment s, FontMetrics metrics,
                                     int x0, int x, TabExpander e,
                                     int startOffset,
                                     int[] justificationData) {
    return getTabbedTextOffset(view, s, metrics, x0, x, e, startOffset, true,
                               justificationData);
}
项目:parabuild-ci    文件:ValueAxis.java   
/**
 * A utility method for determining the width of the widest tick label.
 *
 * @param ticks  the ticks.
 * @param g2  the graphics device.
 * @param drawArea  the area within which the plot and axes should be drawn.
 * @param vertical  a flag that indicates whether or not the tick labels 
 *                  are 'vertical'.
 *
 * @return The width of the tallest tick label.
 */
protected double findMaximumTickLabelWidth(List ticks, 
                                           Graphics2D g2, 
                                           Rectangle2D drawArea, 
                                           boolean vertical) {

    RectangleInsets insets = getTickLabelInsets();
    Font font = getTickLabelFont();
    double maxWidth = 0.0;
    if (!vertical) {
        FontMetrics fm = g2.getFontMetrics(font);
        Iterator iterator = ticks.iterator();
        while (iterator.hasNext()) {
            Tick tick = (Tick) iterator.next();
            Rectangle2D labelBounds = TextUtilities.getTextBounds(
                    tick.getText(), g2, fm);
            if (labelBounds.getWidth() + insets.getLeft() 
                    + insets.getRight() > maxWidth) {
                maxWidth = labelBounds.getWidth() 
                           + insets.getLeft() + insets.getRight();
            }
        }
    }
    else {
        LineMetrics metrics = font.getLineMetrics("ABCxyz", 
                g2.getFontRenderContext());
        maxWidth = metrics.getHeight() 
                   + insets.getTop() + insets.getBottom();
    }
    return maxWidth;

}
项目:jmt    文件:YAxisPlacer.java   
public void place(Graphics2D g, int xCoord) {
    int i;
    int newY;
    String l;
    DPoint p;
    FontMetrics fm;

    if (points == null || points.size()==0)
        return;

    p = points.get(0);
    l = labels.get(0);
    newY = 0;
    for (i = 0; i < labels.size(); i++) {
        l = labels.get(labels.size() - i - 1);
        p = points.get(points.size() - i - 1);
        fm = g.getFontMetrics();
        // if (p.getY() + fm.getStringBounds(l, g).getHeight()
        // + DistanceBetweenTwoLabels > previousY) {
        // overlapping
        // } else {
        //
        // }
        newY = (int) p.getY();
        g.drawString(l, xCoord, (int) (newY + fm.getStringBounds(l, g)
                .getHeight() / 4));
        // previousY = newY;
    }
}
项目:parabuild-ci    文件:ValueAxis.java   
/**
 * A utility method for determining the height of the tallest tick label.
 *
 * @param ticks  the ticks.
 * @param g2  the graphics device.
 * @param drawArea  the area within which the plot and axes should be drawn.
 * @param vertical  a flag that indicates whether or not the tick labels 
 *                  are 'vertical'.
 *
 * @return The height of the tallest tick label.
 */
protected double findMaximumTickLabelHeight(List ticks,
                                            Graphics2D g2, 
                                            Rectangle2D drawArea, 
                                            boolean vertical) {

    RectangleInsets insets = getTickLabelInsets();
    Font font = getTickLabelFont();
    double maxHeight = 0.0;
    if (vertical) {
        FontMetrics fm = g2.getFontMetrics(font);
        Iterator iterator = ticks.iterator();
        while (iterator.hasNext()) {
            Tick tick = (Tick) iterator.next();
            Rectangle2D labelBounds = TextUtilities.getTextBounds(
                    tick.getText(), g2, fm);
            if (labelBounds.getWidth() + insets.getTop() 
                    + insets.getBottom() > maxHeight) {
                maxHeight = labelBounds.getWidth() 
                            + insets.getTop() + insets.getBottom();
            }
        }
    }
    else {
        LineMetrics metrics = font.getLineMetrics("ABCxyz", 
                g2.getFontRenderContext());
        maxHeight = metrics.getHeight() 
                    + insets.getTop() + insets.getBottom();
    }
    return maxHeight;

}
项目:rapidminer    文件:TabbedPaneUI.java   
@Override
protected void paintText(Graphics g, int tabPlacement, Font font, FontMetrics metrics, int tabIndex, String title,
        Rectangle textRect, boolean isSelected) {
    // otherwise the tabs text would not have AA for some reason even though the rest of the
    // components has AA without this
    ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    if (isSelected) {
        font = font.deriveFont(Font.BOLD);
    }
    super.paintText(g, tabPlacement, font, metrics, tabIndex, title, textRect, isSelected);
}
项目:openjdk-jdk10    文件:SunGraphics2D.java   
public FontMetrics getFontMetrics() {
    if (this.fontMetrics != null) {
        return this.fontMetrics;
    }
    /* NB the constructor and the setter disallow "font" being null */
    return this.fontMetrics =
       FontDesignMetrics.getMetrics(font, getFontRenderContext());
}
项目:incubator-netbeans    文件:CodeFoldingSideBar.java   
protected int getMarkSize(Graphics g){
    if (g != null){
        FontMetrics fm = g.getFontMetrics(getColoring().getFont());
        if (fm != null){
            int ret = fm.getAscent() - fm.getDescent();
            return ret - ret%2;
        }
    }
    return -1;
}
项目:Logisim    文件:TablePanel.java   
private void computePreferredSize() {
    Model model = getModel();
    Selection sel = model.getSelection();
    int columns = sel.size();
    if (columns == 0) {
        setPreferredSize(new Dimension(0, 0));
        return;
    }

    Graphics g = getGraphics();
    if (g == null) {
        cellHeight = 16;
        cellWidth = 24;
    } else {
        FontMetrics fm = g.getFontMetrics(HEAD_FONT);
        cellHeight = fm.getHeight();
        cellWidth = 24;
        for (int i = 0; i < columns; i++) {
            String header = sel.get(i).toShortString();
            Value value = model.getValueLog(sel.get(i)).get(0);
            String s = value == null ? "" : value.toDisplayString(sel.get(i).getRadix());
            cellWidth = Math.max(Math.max(cellWidth, fm.stringWidth(header)), fm.stringWidth(s));
        }
    }

    tableWidth = (cellWidth + COLUMN_SEP) * columns - COLUMN_SEP;
    tableHeight = cellHeight * (1 + rowCount) + HEADER_SEP;
    setPreferredSize(new Dimension(tableWidth, tableHeight));
    revalidate();
    repaint();
}
项目:openjdk-jdk10    文件:LWTextComponentPeer.java   
public Dimension getMinimumSize(final int rows, final int columns) {
    final Insets insets;
    synchronized (getDelegateLock()) {
        insets = getTextComponent().getInsets();
    }
    final int borderHeight = insets.top + insets.bottom;
    final int borderWidth = insets.left + insets.right;
    final FontMetrics fm = getFontMetrics(getFont());
    return new Dimension(fm.charWidth(WIDE_CHAR) * columns + borderWidth,
                         fm.getHeight() * rows + borderHeight);
}
项目:incubator-netbeans    文件:FontMetricsCache.java   
/** Get the font-metrics for the given font.
* @param font font for which the metrics is being retrieved.
* @param c component that is used to retrieve the metrics in case it's
*   not yet in the cache.
*/
public static synchronized FontMetrics getFontMetrics(Font f, Component c) {
    Object fm = font2FM.get(f);
    if (fm == null) {
        fm = c.getFontMetrics(f);
        font2FM.put(f, fm);
    }
    return (FontMetrics)fm;
}
项目:incubator-netbeans    文件:FontMetricsCache.java   
/** Get the font-metrics for the given font.
* @param font font for which the metrics is being retrieved.
* @param g graphics that is used to retrieve the metrics in case it's
*   not yet in the cache.
*/
public static synchronized FontMetrics getFontMetrics(Font f, Graphics g) {
    Object fm = font2FM.get(f);
    if (fm == null) {
        fm = g.getFontMetrics(f);
        font2FM.put(f, fm);
    }
    return (FontMetrics)fm;
}
项目:openjdk-jdk10    文件:Utilities.java   
static final int getBreakLocation(Segment s, FontMetrics metrics,
                                  float x0, float x, TabExpander e,
                                  int startOffset, boolean useFPIAPI) {
    char[] txt = s.array;
    int txtOffset = s.offset;
    int txtCount = s.count;
    int index = getTabbedTextOffset(null, s, metrics, x0, x, e, startOffset,
                                    false, null, useFPIAPI);

    if (index >= txtCount - 1) {
        return txtCount;
    }

    for (int i = txtOffset + index; i >= txtOffset; i--) {
        char ch = txt[i];
        if (ch < 256) {
            // break on whitespace
            if (Character.isWhitespace(ch)) {
                index = i - txtOffset + 1;
                break;
            }
        } else {
            // a multibyte char found; use BreakIterator to find line break
            BreakIterator bit = BreakIterator.getLineInstance();
            bit.setText(s);
            int breakPos = bit.preceding(i + 1);
            if (breakPos > txtOffset) {
                index = breakPos - txtOffset;
            }
            break;
        }
    }
    return index;
}
项目:ramus    文件:CloseableTabbedPane.java   
/**
 * Layouts the label
 *
 * @param tabPlacement the placement of the tabs
 * @param metrics      the font metrics
 * @param tabIndex     the index of the tab
 * @param title        the title of the tab
 * @param icon         the icon of the tab
 * @param tabRect      the tab boundaries
 * @param iconRect     the icon boundaries
 * @param textRect     the text boundaries
 * @param isSelected   true whether the tab is selected, false otherwise
 */
protected void layoutLabel(int tabPlacement, FontMetrics metrics,
                           int tabIndex, String title, Icon icon, Rectangle tabRect,
                           Rectangle iconRect, Rectangle textRect, boolean isSelected) {

    textRect.x = textRect.y = iconRect.x = iconRect.y = 0;

    javax.swing.text.View v = getTextViewForTab(tabIndex);
    if (v != null) {
        tabPane.putClientProperty("html", v);
    }

    SwingUtilities.layoutCompoundLabel(tabPane, metrics, title, icon,
            SwingUtilities.CENTER, SwingUtilities.CENTER,
            SwingUtilities.CENTER,
            // SwingUtilities.TRAILING,
            horizontalTextPosition, tabRect, iconRect, textRect,
            textIconGap + 2);

    tabPane.putClientProperty("html", null);

    int xNudge = getTabLabelShiftX(tabPlacement, tabIndex, isSelected);
    int yNudge = getTabLabelShiftY(tabPlacement, tabIndex, isSelected);
    iconRect.x += xNudge;
    iconRect.y += yNudge;
    textRect.x += xNudge;
    textRect.y += yNudge;
}
项目:geomapapp    文件:GeneralUtils.java   
/**
 * Place a string in the center of a bounding rectangle (eg a plot), with an optional white box 
 * behind the text
 * @param g
 * @param text
 * @param rect
 * @param font
 * @param xScale
 * @param yScale
 * @param whiteBox
 */
public static void drawCenteredString(Graphics g, String text, Rectangle2D rect, Font font, double xScale, 
        double yScale, boolean whiteBox) {
    // Get the original font
    Font oldFont = g.getFont();
    // Get the FontMetrics
    FontMetrics metrics = g.getFontMetrics(font);
    // Determine the X coordinate for the text
    int x = (int) ((rect.getWidth()* xScale  - metrics.stringWidth(text))  / 2);
    // Determine the Y coordinate for the text (note we add the ascent, as in java 2d 0 is top of the screen)
    int y = (int) ((rect.getHeight() * yScale - metrics.getHeight()) / 2) + metrics.getAscent();
    // Set the font
    Graphics2D g2 = (Graphics2D) g;
    g2.setFont(font);

    if (whiteBox) {
        //draw a white box behind the text
        int textWidth = (int) font.getStringBounds(text, g2.getFontRenderContext()).getWidth() + 2;
        int textHeight = metrics.getHeight() + 2;
        Color oldColor = g2.getColor();
        g2.setColor(Color.white);
        g2.fillRect(x-1, y-textHeight+4, textWidth, textHeight);
        g2.setColor(oldColor);
    }

    // Draw the String
    g.drawString(text, x , y);
    // Reset font
    g.setFont(oldFont);
}
项目:OpenJSharp    文件:SunGraphics2D.java   
public FontMetrics getFontMetrics() {
    if (this.fontMetrics != null) {
        return this.fontMetrics;
    }
    /* NB the constructor and the setter disallow "font" being null */
    return this.fontMetrics =
       FontDesignMetrics.getMetrics(font, getFontRenderContext());
}
项目:powertext    文件:LineNumberList.java   
/**
 * Changes the width of the cells in the JList so you can see every digit
 * of each.
 */
void updateCellWidths() {

    int oldCellWidth = cellWidth;
    cellWidth = getRhsBorderWidth();

    // Adjust the amount of space the line numbers take up, if necessary.
    if (textArea!=null) {
        Font font = getFont();
        if (font!=null) {
            FontMetrics fontMetrics = getFontMetrics(font);
            int count = 0;
            int lineCount = textArea.getLineCount() +
                    getLineNumberingStartIndex() - 1;
            do {
                lineCount = lineCount/10;
                count++;
            } while (lineCount >= 10);
            cellWidth += fontMetrics.charWidth('9')*(count+1) + 3;
        }
    }

    if (cellWidth!=oldCellWidth) { // Always true
        revalidate();
    }

}
项目:jdk8u-jdk    文件:SunGraphics2D.java   
public FontMetrics getFontMetrics(Font font) {
    if ((this.fontMetrics != null) && (font == this.font)) {
        return this.fontMetrics;
    }
    FontMetrics fm =
      FontDesignMetrics.getMetrics(font, getFontRenderContext());

    if (this.font == font) {
        this.fontMetrics = fm;
    }
    return fm;
}
项目:Logisim    文件:TextFieldCaret.java   
@Override
public Bounds getBounds(Graphics g) {
    int x = field.getX();
    int y = field.getY();
    Font font = field.getFont();
    FontMetrics fm;
    if (font == null)
        fm = g.getFontMetrics();
    else
        fm = g.getFontMetrics(font);
    int width = fm.stringWidth(curText);
    int ascent = fm.getAscent();
    int descent = fm.getDescent();
    int height = ascent + descent;
    switch (field.getHAlign()) {
    case TextField.H_CENTER:
        x -= width / 2;
        break;
    case TextField.H_RIGHT:
        x -= width;
        break;
    default:
        break;
    }
    switch (field.getVAlign()) {
    case TextField.V_TOP:
        y += ascent;
        break;
    case TextField.V_CENTER:
        y += (ascent - descent) / 2;
        break;
    case TextField.V_BOTTOM:
        y -= descent;
        break;
    default:
        break;
    }
    return Bounds.create(x, y - ascent, width, height).add(field.getBounds(g)).expand(3);
}
项目:jmt    文件:XAxisPlacer.java   
public void place(Graphics2D g, int yLabelCoord, int yMarkCoord) {
    int i;
    int previousX, newX, y;
    String l;
    DPoint p;
    FontMetrics fm;

    p = points.get(0);
    l = labels.get(0);
    previousX = 0;
    for (i = 0; i < labels.size(); i++) {
        l = labels.get(i);
        p = points.get(i);
        fm = g.getFontMetrics();
        newX = (int) (p.getX() - fm.getStringBounds(l, g).getWidth() / 2);
        if (newX < previousX + DISTANCE_BETWEEN_TWO_LABELS) {
            continue;
        }
        if (i % 2 == 0)
            y = yLabelCoord;
        else
            y = yLabelCoord + ODD_ADJUSTMENT;
        g.drawString(l, newX, y);
        g.draw(new Line2D.Double(p.getX(), yMarkCoord - MARK_WIDTH / 2, p
                .getX(), yMarkCoord + MARK_WIDTH / 2));
        previousX = (int) (newX + fm.getStringBounds(l, g).getWidth());
    }
}
项目:Logisim    文件:GraphicsUtil.java   
static public Rectangle getTextBounds(Graphics g, String text, int x, int y, int halign, int valign) {
    if (g == null)
        return new Rectangle(x, y, 0, 0);
    FontMetrics mets = g.getFontMetrics();
    int width = mets.stringWidth(text);
    int ascent = mets.getAscent();
    int descent = mets.getDescent();
    int height = ascent + descent;

    Rectangle ret = new Rectangle(x, y, width, height);
    switch (halign) {
    case H_CENTER:
        ret.translate(-(width / 2), 0);
        break;
    case H_RIGHT:
        ret.translate(-width, 0);
        break;
    default:
        ;
    }
    switch (valign) {
    case V_TOP:
        break;
    case V_CENTER:
        ret.translate(0, -(ascent / 2));
        break;
    case V_CENTER_OVERALL:
        ret.translate(0, -(height / 2));
        break;
    case V_BASELINE:
        ret.translate(0, -ascent);
        break;
    case V_BOTTOM:
        ret.translate(0, -height);
        break;
    default:
        ;
    }
    return ret;
}
项目:parabuild-ci    文件:MeterLegend.java   
/**
 * Creates a legend item
 *
 * @param graphics  the graphics device.
 * @param item  the legend item.
 * @param x  the x coordinate.
 * @param y  the y coordinate.
 *
 * @return the legend item.
 */
private DrawableLegendItem createLegendItem(Graphics graphics,
                                            LegendItem item, double x, double y) {

    int innerGap = 2;
    FontMetrics fm = graphics.getFontMetrics();
    LineMetrics lm = fm.getLineMetrics(item.getLabel(), graphics);
    float textHeight = lm.getHeight();

    DrawableLegendItem drawable = new DrawableLegendItem(item);

    float xloc = (float) (x + innerGap + 1.15f * textHeight);
    float yloc = (float) (y + innerGap + (textHeight - lm.getLeading() - lm.getDescent()));

    drawable.setLabelPosition(new Point2D.Float(xloc, yloc));

    float boxDim = textHeight * 0.70f;
    xloc = (float) (x + innerGap + 0.15f * textHeight);
    yloc = (float) (y + innerGap + 0.15f * textHeight);

    drawable.setMarker(new Rectangle2D.Float(xloc, yloc, boxDim, boxDim));

    float width = (float) (drawable.getLabelPosition().getX() - x
                           + fm.stringWidth(item.getLabel()) + 0.5 * textHeight);

    float height = 2 * innerGap + textHeight;
    drawable.setBounds(x, y, width, height);
    return drawable;

}
项目:rapidminer    文件:TabbedPaneUI.java   
@Override
protected FontMetrics getFontMetrics() {
    Font font = tabPane.getFont();
    // selected tab is bold, to avoid resizing always assume bold and make tabs bigger
    font = font.deriveFont(Font.BOLD);
    return tabPane.getFontMetrics(font);
}
项目:incubator-netbeans    文件:AquaViewTabDisplayerUI.java   
@Override
public Dimension getPreferredSize(JComponent c) {
    FontMetrics fm = getTxtFontMetrics();
    int height = fm == null ?
            21 : fm.getAscent() + 2 * fm.getDescent() + 3;
    height += 1; //align with editor tabs
    Insets insets = c.getInsets();
    prefSize.height = height + insets.bottom + insets.top;
    return prefSize;
}
项目:OpenJSharp    文件:DitherTest.java   
@Override
public void paint(Graphics g) {
    int w = getSize().width;
    int h = getSize().height;
    if (img == null) {
        super.paint(g);
        g.setColor(Color.black);
        FontMetrics fm = g.getFontMetrics();
        int x = (w - fm.stringWidth(calcString)) / 2;
        int y = h / 2;
        g.drawString(calcString, x, y);
    } else {
        g.drawImage(img, 0, 0, w, h, this);
    }
}