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);
}
}