Java Code Examples for java.awt.FontMetrics.charWidth()

The following are Jave code examples for showing how to use charWidth() of the java.awt.FontMetrics class. You can vote up the examples you like. Your votes will be used in our system to get more good examples.
+ Save this method
Example 1
Project: Mujeed-Arabic-Prolog   File: TextLineNumber.java   View Source Code Vote up 6 votes
/**
 *  Calculate the width needed to display the maximum line number
 */
private void setPreferredWidth()
{
	Element root = component.getDocument().getDefaultRootElement();
	int lines = root.getElementCount();
	int digits = Math.max(String.valueOf(lines).length(), minimumDisplayDigits);

	//  Update sizes when number of digits in the line number changes

	if (lastDigits != digits)
	{
		lastDigits = digits;
		FontMetrics fontMetrics = getFontMetrics( getFont() );
		int width = fontMetrics.charWidth( '0' ) * digits;
		Insets insets = getInsets();
		int preferredWidth = insets.left + insets.right + width;

		Dimension d = getPreferredSize();
		d.setSize(preferredWidth, HEIGHT);
		setPreferredSize( d );
		setSize( d );
	}
}
 
Example 2
Project: GIFKR   File: ASCIIFilter.java   View Source Code Vote up 6 votes
private float getFillLevel(char c, FontMetrics f) {
	
	BufferedImage img = new BufferedImage(f.charWidth(c), f.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
	Graphics2D g = img.createGraphics();

	g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, antialiasing ? RenderingHints.VALUE_TEXT_ANTIALIAS_ON : RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
	g.setFont(font);
	g.setColor(Color.black);
	g.drawString(c+"", 0, img.getHeight()-f.getDescent());
	
	int[] rgb = img.getRGB(0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth());
	int totalOpacity = 0;
	
	for(int color : rgb)
		totalOpacity += ImageTools.getAlpha(color);
	
	return totalOpacity / (float)(rgb.length*255);
}
 
Example 3
Project: incubator-netbeans   File: KeywordsPanel.java   View Source Code Vote up 5 votes
/**
 * Creates new form KeywordsPanel. 
 *
 * @param view view with the given filter
 * @param filter filter to be edited. Can be null and in that case
 *               all fields are disabled.
 */
public KeywordsPanel( KeywordsFilter filter ) {
    this.filter = filter;

    initComponents();
    initA11y();
    
    if( "Metal".equals( UIManager.getLookAndFeel().getID() ) ) //NOI18N
        setOpaque( true );
    else
        setOpaque( false );

    // it's not generated by form editor
    JPanel topAlign = new JPanel();
    topAlign.setLayout(new BorderLayout());
    topAlign.add(conditionsPanel, BorderLayout.NORTH);
    conditionsScrollPane.setViewportView(topAlign);
    // compute 80x10 chars space in scroll pane
    FontMetrics fm = getFontMetrics(getFont());
    int width = fm.charWidth('n') * 80;  // NOI18N
    int height = fm.getHeight() * 10;
    conditionsScrollPane.setPreferredSize(new java.awt.Dimension(width, height));

    Color background = (Color)UIManager.get("Table.background"); //NOI18N
    conditionsPanel.setBackground(background);
    topAlign.setBackground(background);

    moreButton.addActionListener(this);
    fewerButton.addActionListener(this);
    matchAllRadio.addActionListener(this);
    matchAnyRadio.addActionListener(this);

    showFilter(filter);
    updateSensitivity();
}
 
Example 4
Project: Backmemed   File: XFont.java   View Source Code Vote up 5 votes
private BufferedImage getFontImage(final char ch, final boolean antiAlias)
{
	final BufferedImage tempfontImage =
		new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
	final Graphics2D g = (Graphics2D)tempfontImage.getGraphics();
	if(antiAlias)
		g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
			RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
	else
		g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
			RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
	g.setFont(font);
	final FontMetrics fontMetrics = g.getFontMetrics();
	int charwidth = fontMetrics.charWidth(ch) + 8;
	
	if(charwidth <= 0)
		charwidth = 7;
	int charheight = fontMetrics.getHeight() + 3;
	if(charheight <= 0)
		charheight = font.getSize();
	final BufferedImage fontImage = new BufferedImage(charwidth, charheight,
		BufferedImage.TYPE_INT_ARGB);
	final Graphics2D gt = (Graphics2D)fontImage.getGraphics();
	if(antiAlias)
		gt.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
			RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
	else
		gt.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
			RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
	gt.setFont(font);
	gt.setColor(Color.WHITE);
	final int charx = 3;
	final int chary = 1;
	gt.drawString(String.valueOf(ch), charx,
		chary + fontMetrics.getAscent());
	
	return fontImage;
	
}
 
Example 5
Project: incubator-netbeans   File: QuickSearchPopup.java   View Source Code Vote up 5 votes
/** Computes width of string up to maxCharCount, with font of given JComponent
 * and with maximum percentage of owning Window that can be taken */
private static int computeWidth (JComponent comp, int maxCharCount, int percent) {
    FontMetrics fm = comp.getFontMetrics(comp.getFont());
    int charW = fm.charWidth('X');
    int result = charW * maxCharCount;
    // limit width to 50% of containing window
    Window w = SwingUtilities.windowForComponent(comp);
    if (w != null) {
        result = Math.min(result, w.getWidth() * percent / 100);
    }
    return result;
}
 
Example 6
Project: incubator-netbeans   File: QuickSearchPopup.java   View Source Code Vote up 5 votes
/** Computes width of string up to maxCharCount, with font of given JComponent
 * and with maximum percentage of owning Window that can be taken */
private static int computeWidth (JComponent comp, int maxCharCount, int percent) {
    FontMetrics fm = comp.getFontMetrics(comp.getFont());
    int charW = fm.charWidth('X');
    int result = charW * maxCharCount;
    // limit width to 50% of containing window
    Window w = SwingUtilities.windowForComponent(comp);
    if (w != null) {
        result = Math.min(result, w.getWidth() * percent / 100);
    }
    return result;
}
 
Example 7
Project: Wurst-MC-1.12   File: WurstFont.java   View Source Code Vote up 5 votes
private BufferedImage getFontImage(final char ch, final boolean antiAlias)
{
	final BufferedImage tempfontImage =
		new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
	final Graphics2D g = (Graphics2D)tempfontImage.getGraphics();
	if(antiAlias)
		g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
			RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
	else
		g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
			RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
	g.setFont(font);
	final FontMetrics fontMetrics = g.getFontMetrics();
	int charwidth = fontMetrics.charWidth(ch) + 8;
	
	if(charwidth <= 0)
		charwidth = 7;
	int charheight = fontMetrics.getHeight() + 3;
	if(charheight <= 0)
		charheight = font.getSize();
	final BufferedImage fontImage = new BufferedImage(charwidth, charheight,
		BufferedImage.TYPE_INT_ARGB);
	final Graphics2D gt = (Graphics2D)fontImage.getGraphics();
	if(antiAlias)
		gt.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
			RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
	else
		gt.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
			RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
	gt.setFont(font);
	gt.setColor(Color.WHITE);
	final int charx = 3;
	final int chary = 1;
	gt.drawString(String.valueOf(ch), charx,
		chary + fontMetrics.getAscent());
	
	return fontImage;
	
}
 
Example 8
Project: powertext   File: LineNumberList.java   View Source Code Vote up 5 votes
/**
 * 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();
	}

}
 
Example 9
Project: powertext   File: TokenImpl.java   View Source Code Vote up 5 votes
@Override
public int getOffsetBeforeX(RSyntaxTextArea textArea, TabExpander e,
						float startX, float endBeforeX) {

	FontMetrics fm = textArea.getFontMetricsForTokenType(getType());
	int i = textOffset;
	int stop = i + textCount;
	float x = startX;

	while (i<stop) {
		if (text[i]=='\t') {
			x = e.nextTabStop(x, 0);
		}
		else {
			x += fm.charWidth(text[i]);
		}
		if (x>endBeforeX) {
			// If not even the first character fits into the space, go
			// ahead and say the first char does fit so we don't go into
			// an infinite loop.
			int intoToken = Math.max(i-textOffset, 1);
			return getOffset() + intoToken;
		}
		i++;
	}

	// If we got here, the whole token fit in (endBeforeX-startX) pixels.
	return getOffset() + textCount - 1;

}
 
Example 10
Project: OpenJSharp   File: LWTextComponentPeer.java   View Source Code Vote up 5 votes
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);
}
 
Example 11
Project: jdk8u-jdk   File: LWTextComponentPeer.java   View Source Code Vote up 5 votes
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);
}
 
Example 12
Project: EMC   File: IFont.java   View Source Code Vote up 5 votes
private BufferedImage getFontImage(final char ch, final boolean antiAlias) {
	final BufferedImage tempfontImage = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
	final Graphics2D g = (Graphics2D) tempfontImage.getGraphics();
	if (antiAlias)
		g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
	else
		g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
	g.setFont(font);
	final FontMetrics fontMetrics = g.getFontMetrics();
	int charwidth = fontMetrics.charWidth(ch) + 8;

	if (charwidth <= 0)
		charwidth = 7;
	int charheight = fontMetrics.getHeight() + 3;
	if (charheight <= 0)
		charheight = font.getSize();
	final BufferedImage fontImage = new BufferedImage(charwidth, charheight, BufferedImage.TYPE_INT_ARGB);
	final Graphics2D gt = (Graphics2D) fontImage.getGraphics();
	if (antiAlias)
		gt.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
	else
		gt.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
	gt.setFont(font);
	gt.setColor(Color.WHITE);
	final int charx = 3;
	final int chary = 1;
	gt.drawString(String.valueOf(ch), charx, chary + fontMetrics.getAscent());

	return fontImage;

}
 
Example 13
Project: openjdk-jdk10   File: LWTextComponentPeer.java   View Source Code Vote up 5 votes
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);
}
 
Example 14
Project: incubator-netbeans   File: QuietEditorPane.java   View Source Code Vote up 4 votes
private void setFontHeightWidth(Font font) {
    FontMetrics metrics=getFontMetrics(font);
    fontHeight=metrics.getHeight();
    charWidth=metrics.charWidth('m');
}
 
Example 15
Project: febit   File: DefaultWordRender.java   View Source Code Vote up 4 votes
@Override
public void render(BufferedImage image, String word) {
    final int width = image.getWidth();
    final int height = image.getHeight();
    Graphics2D graphics2D = image.createGraphics();

    RenderingHints hints = new RenderingHints(
            RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
    hints.add(new RenderingHints(RenderingHints.KEY_RENDERING,
            RenderingHints.VALUE_RENDER_QUALITY));
    graphics2D.setRenderingHints(hints);

    char[] wordChars = word.toCharArray();
    int wordLen = wordChars.length;

    Font[] chosenFonts = new Font[wordLen];
    int[] charWidths = new int[wordLen];
    int widthNeeded = 0;

    int maxFontSize = 0;

    for (int i = 0; i < wordLen; i++) {
        Font font = RandomUtil.rnd(fonts);

        if (font.getSize() > maxFontSize) {
            maxFontSize = font.getSize();
        }

        FontMetrics fontMetrics = graphics2D.getFontMetrics(font);
        int charWidth = fontMetrics.charWidth(wordChars[i]);
        widthNeeded = widthNeeded + charWidth;
        chosenFonts[i] = font;
        charWidths[i] = charWidth;
    }
    widthNeeded += charSpace * (wordLen - 1);

    int startPosX = (width - widthNeeded) / 2;
    int startPosY = (height - maxFontSize) / 5 + maxFontSize;

    for (int i = 0; i < wordLen; i++) {
        graphics2D.setFont(chosenFonts[i]);
        graphics2D.setColor(RandomUtil.rnd(colors));
        graphics2D.drawString(String.valueOf(wordChars[i]), startPosX, startPosY);
        startPosX = startPosX + charWidths[i] + charSpace;
    }
}
 
Example 16
Project: powertext   File: ConfigurableCaret.java   View Source Code Vote up 4 votes
/**
 * Helper function used by the block and underline carets to ensure the
 * width of the painted caret is valid.  This is done for the following
 * reasons:
 *
 * <ul>
 *   <li>The <code>View</code> classes in the javax.swing.text package
 *       always return a width of "1" when <code>modelToView</code> is
 *       called.  We'll be needing the actual width.</li>
 *   <li>Even in smart views, such as <code>RSyntaxTextArea</code>'s
 *       <code>SyntaxView</code> and <code>WrappedSyntaxView</code> that
 *       return the width of the current character, if the caret is at the
 *       end of a line for example, the width returned from
 *       <code>modelToView</code> will be 0 (as the width of unprintable
 *       characters such as '\n' is calculated as 0).  In this case, we'll
 *       use a default width value.</li>
 * </ul>
 *
 * @param rect The rectangle returned by the current
 *        <code>View</code>'s <code>modelToView</code>
 *        method for the caret position.
 */
private void validateWidth(Rectangle rect) {

	// If the width value > 1, we assume the View is
	// a "smart" view that returned the proper width.
	// So only worry about this stuff if width <= 1.
	if (rect!=null && rect.width<=1) {

		// The width is either 1 (most likely, we're using a "dumb" view
		// like those in javax.swing.text) or 0 (most likely, we're using
		// a "smart" view like org.fife.ui.rsyntaxtextarea.SyntaxView,
		// we're at the end of a line, and the width of '\n' is being
		// computed as 0).

		try {

			// Try to get a width for the character at the caret
			// position.  We use the text area's font instead of g's
			// because g's may vary in an RSyntaxTextArea.
			RTextArea textArea = getTextArea();
			textArea.getDocument().getText(getDot(),1, seg);
			Font font = textArea.getFont();
			FontMetrics fm = textArea.getFontMetrics(font);
			rect.width = fm.charWidth(seg.array[seg.offset]);

			// This width being returned 0 likely means that it is an
			// unprintable character (which is almost 100% to be a
			// newline char, i.e., we're at the end of a line).  So,
			// just use the width of a space.
			if (rect.width==0) {
				rect.width = fm.charWidth(' ');
			}

		} catch (BadLocationException ble) {
			// This shouldn't ever happen.
			ble.printStackTrace();
			rect.width = 8;
		}

	} // End of if (rect!=null && rect.width<=1).

}
 
Example 17
Project: powertext   File: TokenImpl.java   View Source Code Vote up 4 votes
@Override
public Rectangle listOffsetToView(RSyntaxTextArea textArea, TabExpander e,
		int pos, int x0, Rectangle rect) {

	int stableX = x0; // Cached ending x-coord. of last tab or token.
	TokenImpl token = this;
	FontMetrics fm = null;
	Segment s = new Segment();

	while (token != null && token.isPaintable()) {

		fm = textArea.getFontMetricsForTokenType(token.getType());
		if (fm == null) {
			return rect; // Don't return null as things'll error.
		}
		char[] text = token.text;
		int start = token.textOffset;
		int end = start + token.textCount;

		// If this token contains the position for which to get the
		// bounding box...
		if (token.containsPosition(pos)) {

			s.array = token.text;
			s.offset = token.textOffset;
			s.count = pos - token.getOffset();

			// Must use this (actually fm.charWidth()), and not
			// fm.charsWidth() for returned value to match up with where
			// text is actually painted on OS X!
			int w = Utilities.getTabbedTextWidth(s, fm, stableX, e,
					token.getOffset());
			rect.x = stableX + w;
			end = token.documentToToken(pos);

			if (text[end] == '\t') {
				rect.width = fm.charWidth(' ');
			}
			else {
				rect.width = fm.charWidth(text[end]);
			}

			return rect;

		}

		// If this token does not contain the position for which to get
		// the bounding box...
		else {
			s.array = token.text;
			s.offset = token.textOffset;
			s.count = token.textCount;
			stableX += Utilities.getTabbedTextWidth(s, fm, stableX, e,
					token.getOffset());
		}

		token = (TokenImpl)token.getNextToken();

	}

	// If we didn't find anything, we're at the end of the line. Return
	// a width of 1 (so selection highlights don't extend way past line's
	// text). A ConfigurableCaret will know to paint itself with a larger
	// width.
	rect.x = stableX;
	rect.width = 1;
	return rect;

}
 
Example 18
Project: SWET   File: ListJavaFonts.java   View Source Code Vote up 4 votes
public static void main(String[] args) {

		List<String> monospaceFontFamilyNames = new ArrayList<>();
		GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment
				.getLocalGraphicsEnvironment();
		String[] fontFamilyNames = graphicsEnvironment
				.getAvailableFontFamilyNames();

		BufferedImage bufferedImage = new BufferedImage(1, 1,
				BufferedImage.TYPE_INT_ARGB);
		Graphics graphics = bufferedImage.createGraphics();

		for (String fontFamilyName : fontFamilyNames) {
			boolean isMonospaced = true;
			//
			int fontStyle = Font.PLAIN;
			int fontSize = 12;
			Font font = new Font(fontFamilyName, fontStyle, fontSize);
			@SuppressWarnings("serial")
			List<Integer> codePoints = new ArrayList<Integer>() {
				{
					add(108); /* l */
					add(109); /* m */
					add(119); /* w */
					add(49); /* 1 */
					add(52); /* 4 */
				}
			};
			FontMetrics fontMetrics = graphics.getFontMetrics(font);

			int firstCharacterWidth = 0;
			boolean hasFirstCharacterWidth = false;
			for (int codePoint : codePoints) {
				if (Character.isValidCodePoint(codePoint)
						&& (Character.isLetter(codePoint)
								|| Character.isDigit(codePoint))) {
					char character = (char) codePoint;
					int characterWidth = fontMetrics.charWidth(character);
					if (hasFirstCharacterWidth) {
						if (characterWidth != firstCharacterWidth) {
							isMonospaced = false;
							break;
						}
					} else {
						firstCharacterWidth = characterWidth;
						hasFirstCharacterWidth = true;
					}
				}
			}

			if (isMonospaced) {
				monospaceFontFamilyNames.add(fontFamilyName);
			}
		}

		graphics.dispose();
		for (String fontFamily : monospaceFontFamilyNames) {
			System.out.println(fontFamily);
		}
	}
 
Example 19
Project: jdk8u-jdk   File: TestSGEuseAlternateFontforJALocales.java   View Source Code Vote up 4 votes
public static void main(String args[]) throws Exception {
     System.out.println("Default Charset = "
         + Charset.defaultCharset().name());
     System.out.println("Locale = " + Locale.getDefault());
     String os = System.getProperty("os.name");
     String encoding = System.getProperty("file.encoding");
     /* Want to test the JA locale uses alternate font for DialogInput. */
     boolean jaTest = encoding.equalsIgnoreCase("windows-31j");
     if (!os.startsWith("Win") && jaTest) {
         System.out.println("Skipping Windows only test");
         return;
     }

     String className = "sun.java2d.SunGraphicsEnvironment";
     String methodName = "useAlternateFontforJALocales";
     Class sge = Class.forName(className);
     Method uafMethod = sge.getMethod(methodName, (Class[])null);
     Object ret = uafMethod.invoke(null);
     GraphicsEnvironment ge =
         GraphicsEnvironment.getLocalGraphicsEnvironment();
     ge.preferLocaleFonts();
     ge.preferProportionalFonts();
     if (jaTest) {
         Font msMincho = new Font("MS Mincho", Font.PLAIN, 12);
         if (!msMincho.getFamily(Locale.ENGLISH).equals("MS Mincho")) {
              System.out.println("MS Mincho not installed. Skipping test");
              return;
         }
         Font dialogInput = new Font("DialogInput", Font.PLAIN, 12);
         Font courierNew = new Font("Courier New", Font.PLAIN, 12);
         Font msGothic = new Font("MS Gothic", Font.PLAIN, 12);
         BufferedImage bi = new BufferedImage(1,1,1);
         Graphics2D g2d = bi.createGraphics();
         FontMetrics cnMetrics = g2d.getFontMetrics(courierNew);
         FontMetrics diMetrics = g2d.getFontMetrics(dialogInput);
         FontMetrics mmMetrics = g2d.getFontMetrics(msMincho);
         FontMetrics mgMetrics = g2d.getFontMetrics(msGothic);
         // This tests to make sure we at least have applied
         //  "preferLocaleFonts for Japanese
         if (cnMetrics.charWidth('A') == diMetrics.charWidth('A')) {
              throw new RuntimeException
                    ("Courier New should not be used for DialogInput");
         }
         // This is supposed to make sure we are using MS Mincho instead
         //  of MS Gothic. However they are metrics identical so its
         // not definite proof.
         if (diMetrics.charWidth('A') != mmMetrics.charWidth('A')) {
              throw new RuntimeException
                  ("MS Mincho should be used for DialogInput");
         }
    }
}
 
Example 20
Project: openjdk-jdk10   File: TestSGEuseAlternateFontforJALocales.java   View Source Code Vote up 4 votes
public static void main(String args[]) throws Exception {
     System.out.println("Default Charset = "
         + Charset.defaultCharset().name());
     System.out.println("Locale = " + Locale.getDefault());
     String os = System.getProperty("os.name");
     String encoding = System.getProperty("file.encoding");
     /* Want to test the JA locale uses alternate font for DialogInput. */
     boolean jaTest = encoding.equalsIgnoreCase("windows-31j");
     if (!os.startsWith("Win") && jaTest) {
         System.out.println("Skipping Windows only test");
         return;
     }

     String className = "sun.java2d.SunGraphicsEnvironment";
     String methodName = "useAlternateFontforJALocales";
     Class sge = Class.forName(className);
     Method uafMethod = sge.getMethod(methodName, (Class[])null);
     Object ret = uafMethod.invoke(null);
     GraphicsEnvironment ge =
         GraphicsEnvironment.getLocalGraphicsEnvironment();
     ge.preferLocaleFonts();
     ge.preferProportionalFonts();
     if (jaTest) {
         Font msMincho = new Font("MS Mincho", Font.PLAIN, 12);
         if (!msMincho.getFamily(Locale.ENGLISH).equals("MS Mincho")) {
              System.out.println("MS Mincho not installed. Skipping test");
              return;
         }
         Font dialogInput = new Font("DialogInput", Font.PLAIN, 12);
         Font courierNew = new Font("Courier New", Font.PLAIN, 12);
         Font msGothic = new Font("MS Gothic", Font.PLAIN, 12);
         BufferedImage bi = new BufferedImage(1,1,1);
         Graphics2D g2d = bi.createGraphics();
         FontMetrics cnMetrics = g2d.getFontMetrics(courierNew);
         FontMetrics diMetrics = g2d.getFontMetrics(dialogInput);
         FontMetrics mmMetrics = g2d.getFontMetrics(msMincho);
         FontMetrics mgMetrics = g2d.getFontMetrics(msGothic);
         // This tests to make sure we at least have applied
         //  "preferLocaleFonts for Japanese
         if (cnMetrics.charWidth('A') == diMetrics.charWidth('A')) {
              throw new RuntimeException
                    ("Courier New should not be used for DialogInput");
         }
         // This is supposed to make sure we are using MS Mincho instead
         //  of MS Gothic. However they are metrics identical so its
         // not definite proof.
         if (diMetrics.charWidth('A') != mmMetrics.charWidth('A')) {
              throw new RuntimeException
                  ("MS Mincho should be used for DialogInput");
         }
    }
}