Java基础 awt Font 四种字体样式

  •     JDK :OpenJDK-11
  •      OS :CentOS 7.6.1810
  •      IDE :Eclipse 2019‑03
  • typesetting :Markdown

code

package per.jizuiku.gui;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;

/**
 * @author 给最苦
 * @date 2019/06/30
 * @blog www.cnblogs.com/jizuiku
 */
public class Demo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            getImage(0);
            getImage(1);
            // style=2,本应该是斜体效果。可是通过生成的图片却看不出来
            getImage(2);
            getImage(3);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    /**
     * @param fontStyle
     */
    public static void getImage(int fontStyle) throws FileNotFoundException, IOException {
        // 得到图片缓冲区
        int width = 100;
        int height = 50;
        int imageType = BufferedImage.TYPE_INT_BGR;
        BufferedImage myImage = new BufferedImage(width, height, imageType);

        // 得到画笔
        Graphics2D pen = (Graphics2D)myImage.getGraphics();

        // 设置笔的颜色,即背景色
        pen.setColor(Color.WHITE);

        // 画出一个矩形
        // 坐标x 坐标y 宽度100 长度50
        pen.fillRect(0, 0, 100, 50);

        // Mononspace  大小25
        Font font = new Font("Mononspace", fontStyle, 25);
        pen.setFont(font);

        // 字的颜色 和 背景的颜色 要不同的
        // 第一次没有注意到,结果 运行了三四次 都发现没有字呀
        pen.setColor(Color.blue);

        // 写字
        pen.drawString("abcd", 20, 35);

        ImageIO.write(myImage, "JPEG", new FileOutputStream(fontStyle + ".jpg"));

    }

}

result

fontStyle_0

ffontStyle_1

fontStyle_2

fontStyle_3

sourceCode

/**
    * The plain style constant.
    */
public static final int PLAIN       = 0;

/**
    * The bold style constant.  This can be combined with the other style
    * constants (except PLAIN) for mixed styles.
    */
public static final int BOLD        = 1;

/**
    * The italicized style constant.  This can be combined with the other
    * style constants (except PLAIN) for mixed styles.
    */
public static final int ITALIC      = 2;
/**
    * Creates a new {@code Font} from the specified name, style and
    * point size.
    * <p>
    * The font name can be a font face name or a font family name.
    * It is used together with the style to find an appropriate font face.
    * When a font family name is specified, the style argument is used to
    * select the most appropriate face from the family. When a font face
    * name is specified, the face's style and the style argument are
    * merged to locate the best matching font from the same family.
    * For example if face name "Arial Bold" is specified with style
    * {@code Font.ITALIC}, the font system looks for a face in the
    * "Arial" family that is bold and italic, and may associate the font
    * instance with the physical font face "Arial Bold Italic".
    * The style argument is merged with the specified face's style, not
    * added or subtracted.
    * This means, specifying a bold face and a bold style does not
    * double-embolden the font, and specifying a bold face and a plain
    * style does not lighten the font.
    * <p>
    * If no face for the requested style can be found, the font system
    * may apply algorithmic styling to achieve the desired style.
    * For example, if {@code ITALIC} is requested, but no italic
    * face is available, glyphs from the plain face may be algorithmically
    * obliqued (slanted).
    * <p>
    * Font name lookup is case insensitive, using the case folding
    * rules of the US locale.
    * <p>
    * If the {@code name} parameter represents something other than a
    * logical font, i.e. is interpreted as a physical font face or family, and
    * this cannot be mapped by the implementation to a physical font or a
    * compatible alternative, then the font system will map the Font
    * instance to "Dialog", such that for example, the family as reported
    * by {@link #getFamily() getFamily} will be "Dialog".
    *
    * @param name the font name.  This can be a font face name or a font
    * family name, and may represent either a logical font or a physical
    * font found in this {@code GraphicsEnvironment}.
    * The family names for logical fonts are: Dialog, DialogInput,
    * Monospaced, Serif, or SansSerif. Pre-defined String constants exist
    * for all of these names, for example, {@code DIALOG}. If {@code name} is
    * {@code null}, the <em>logical font name</em> of the new
    * {@code Font} as returned by {@code getName()} is set to
    * the name "Default".
    * @param style the style constant for the {@code Font}
    * The style argument is an integer bitmask that may
    * be {@code PLAIN}, or a bitwise union of {@code BOLD} and/or
    * {@code ITALIC} (for example, {@code ITALIC} or {@code BOLD|ITALIC}).
    * If the style argument does not conform to one of the expected
    * integer bitmasks then the style is set to {@code PLAIN}.
    * @param size the point size of the {@code Font}
    * @see GraphicsEnvironment#getAllFonts
    * @see GraphicsEnvironment#getAvailableFontFamilyNames
    * @since 1.0
    */
public Font(String name, int style, int size) {
    this.name = (name != null) ? name : "Default";
    this.style = (style & ~0x03) == 0 ? style : 0;
    this.size = size;
    this.pointSize = size;
}

resource

  • [ JDK ] openjdk.java.net
  • [ doc - 参考 ] docs.oracle.com/en/java/javase/11
  • [ 规范 - 推荐 ] yq.aliyun.com/articles/69327
  • [ 规范 - 推荐 ] google.github.io/styleguide
  • [ 源码 ] hg.openjdk.java.net
  • [ OS ] www.centos.org
  • [ IDE ] www.eclipse.org/downloads/packages
  • [ 平台 ] www.cnblogs.com


感谢帮助过 给最苦 的人们。
Java、Groovy和Scala等基于JVM的语言,优秀,值得学习。
规范的命名和代码格式等,有助于沟通和理解。
JVM的配置、监控与优化,比较实用,值得学习。

posted @ 2019-06-30 16:12  给最苦  阅读(10331)  评论(0编辑  收藏  举报