当前位置 : 主页 > 编程语言 > java >

《Java 核心技术 卷1》 笔记 第七章 图形程序设计(5)

来源:互联网 收集:自由互联 发布时间:2022-07-13
7.9 为文本设置特殊字体 设置的字体,只能是当前系统的字体之一,可使用 GraphicsEnvironment 打印适合当前系统的字体。 public class Main { public static void main ( String [] args ) throws CloneNotSuppor


7.9 为文本设置特殊字体

设置的字体,只能是当前系统的字体之一,可使用 GraphicsEnvironment 打印适合当前系统的字体。

public class Main {
public static void main(String[] args) throws CloneNotSupportedException, InterruptedException {
Main solution = new Main();
GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
Font[] fonts = environment.getAllFonts();
for(Font font:fonts){
System.out.println(font);
}
}
}

《Java 核心技术 卷1》 笔记 第七章 图形程序设计(5)_linq

五种逻辑字体:

自动适配系统字体:SanSerif/Serif/Monospaced/Dialog/DialogInput

笔触:

Font.PLAIN 普通

Font.BOLD 加粗

Font.ITALIC 斜体

Font.BOLD|Font.ITALIC 加粗且斜体

import javax.swing.*;
import java.awt.*;
public class Main {
public static void main(String[] args) throws CloneNotSupportedException, InterruptedException {
Main solution = new Main();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MyFrame f = new MyFrame();
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setVisible(true);
}
});
}

}

class MyFrame extends JFrame {
public MyFrame(){
setSize(300,200);
MyComponent c = new MyComponent();
add(c);
}
}
class MyComponent extends JComponent{
public void paintComponent(Graphics g){
Font f = new Font("SanSerif",Font.BOLD|Font.ITALIC,20);
g.setFont(f);
g.drawString("abc",120,100);
}
}

文字居中绘制(自己想的,不准确):

public class Main {
public static void main(String[] args) throws CloneNotSupportedException, InterruptedException {
Main solution = new Main();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MyFrame f = new MyFrame();
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setVisible(true);
}
});
}

}

class MyFrame extends JFrame {
public static final int W = 1000;
public static final int H = 1000;
public MyFrame(){
setSize(W,H);
MyComponent c = new MyComponent();
add(c);
}
}
class MyComponent extends JComponent{
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D) g;
Font f = new Font("SanSerif",Font.BOLD|Font.ITALIC,20);
g2.setFont(f);
FontRenderContext context = g2.getFontRenderContext();
Rectangle2D rectangle2D = f.getStringBounds("febp",context);
g2.drawString("febp",(int)(MyFrame.W-rectangle2D.getWidth())/2,(int)(MyFrame.H-rectangle2D.getWidth())/2);
}
}

《Java 核心技术 卷1》 笔记 第七章 图形程序设计(5)_linq_02

这块作者讲各种线,说实话都没看懂,因为根本不知道得到的那个Rectangle2D坐标是什么

《Java 核心技术 卷1》 笔记 第七章 图形程序设计(5)_java_03

实测是上图这样,红色箭头是(0,0)。蓝色是得到Rectangle2D对应坐标值与宽高:(0,-ascent,width,height),所以要让整个长方形露出来,应该是(0,getY()+ascent,width,height)

public class Main {
public static void main(String[] args) throws CloneNotSupportedException, InterruptedException {
Main solution = new Main();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MyFrame f = new MyFrame();
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setVisible(true);
}
});
}

}

class MyFrame extends JFrame {
public static final int W = 300;
public static final int H = 200;
public MyFrame(){
setTitle("FontTest");
setSize(W,H);
MyComponent c = new MyComponent();
add(c);
}
}
class MyComponent extends JComponent {
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
String message = "Hello,World!";
Font f = new Font("Serif",Font.BOLD,36);
g2.setFont(f);
FontRenderContext context = g2.getFontRenderContext();
Rectangle2D bounds = f.getStringBounds(message,context);
double x = (getWidth()-bounds.getWidth())/2;
double y = (getHeight()-bounds.getHeight())/2;

double ascent = -bounds.getY();//?
double baseY = y+ascent;
g2.drawString(message,(int)x,(int)baseY);
Rectangle2D rect = new Rectangle2D.Double(x,y,bounds.getWidth(),bounds.getHeight());
g2.draw(rect);

Rectangle2D start = new Rectangle2D.Double(0,bounds.getY()+ascent,bounds.getWidth(),bounds.getHeight());
g2.draw(start);
}
}

《Java 核心技术 卷1》 笔记 第七章 图形程序设计(5)_核心技术_04

    系列内容:

《Java 核心技术 卷1》 笔记:第一章 Java程序设计概述

《Java 核心技术 卷1》 笔记:第二章 Java程序设计环境

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(1)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(2)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(3)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(4)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(5)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(6)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参

《Java 核心技术 卷1》 笔记 第四章:类与对象

《Java 核心技术 卷1》 笔记 第四章:类与对象(2) GregorianCalendar 与 类的基本组成

《Java 核心技术 卷1》 笔记 第四章:类与对象(3) 构造器全局私有方法

《Java 核心技术 卷1》 笔记 第四章:类与对象(4) 静态字段+静态方法+工厂方法

《Java 核心技术 卷1》 笔记 第四章:类与对象(5) 形参与实参 构造器的默认值与默认构造

《Java 核心技术 卷1》 笔记 第四章:类与对象(6) 构造器调用与初始化块

《Java 核心技术 卷1》 笔记 第四章:类与对象(7) 注释、JavaDoc与类设计

《Java 核心技术 卷1》 笔记 第五章 继承

《Java 核心技术 卷1》 笔记 第五章 继承(2)

《Java 核心技术 卷1》 笔记 第五章 继承(3)

《Java 核心技术 卷1》 笔记 第五章 继承(4)equals方法

《Java 核心技术 卷1》 笔记 第五章 继承(5)hashCode 与 toString

《Java 核心技术 卷1》 笔记 第五章 继承(6) 泛型

《Java 核心技术 卷1》 笔记 第五章 继承(7) 包装类和可变数组

《Java 核心技术 卷1》 笔记 第五章 继承(8) 枚举类与类反射

《Java 核心技术 卷1》 笔记 第五章 继承(9) 异常捕获与反射运用

《Java 核心技术 卷1》 笔记 第五章 继承(10)反射

《Java 核心技术 卷1》 笔记 第五章 继承(11)反射泛型数组+方法指针+类设计技巧

《Java 核心技术 卷1》 笔记 第六章 接口和内部类

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(2)

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(3) 接口回调与内部类

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(4) 局部内部类和局部内部类引用方法变量分析

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(5) 匿名内部类和静态内部类

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(6) 静态代理

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(7) 动态代理

《Java 核心技术 卷1》 笔记 第七章 图形程序设计

《Java 核心技术 卷1》 笔记 第七章 图形程序设计(2)

《Java 核心技术 卷1》 笔记 第七章 图形程序设计(3)

《Java 核心技术 卷1》 笔记 第七章 图形程序设计(4)

喜欢的话,点个赞吧~!平时做题,以及笔记内容将更新到公众号。

关注公众号,互相学习:钰娘娘知识汇总

《Java 核心技术 卷1》 笔记 第七章 图形程序设计(5)_p2p_05

网友评论