java里字体名称是怎么定义的?

java里字体名称是怎么定义的?,第1张

1、物理字体

物理 字体是实际的字体库,包含字形数据和表,这些数据和表使用字体技术(如TrueType 或 PostScript Type 1)将字符序列映射到字形序列。Java Platform 的所有实毁升现都支持 TrueType 字体;对其他字体技术的支持是与实现相关的。物理字体可以使用字体名称,如 Helvetica、Palatino、HonMincho 或任意数量的其他字体名称。通常,每种物理字体只支持有限的书写系统集合,例如,只支持拉丁文字符,或者只支持日文和基本拉丁文。可用的物理字体集合随配置的不同而有所不同。要求特定字体的应用程序可以使用 createFont 方法来捆绑这些字体,并对其进行实例化。

2、逻辑字体

逻辑 字体是由必须受所有 Java 运行时环境支持的 Java 平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog 和 DialogInput。这些逻辑字体不是实际的字体库。此外,由 Java 运行时环境将逻辑字体名称映射到物理字体。映射关系与实现和通常语言环境相关,因此它们提供的外观和规格各不相同。通常,为了覆盖庞大的字符范围,每种逻辑字体名称都映射到几种物理字体。

注:同级的 AWT 组件(如 Label 和 TextField)只可以使用逻辑字体。

3、字符和字形

字符 是表示项的符号(如字母、数字或具有抽象意义的标点)。例如,'g'(G 的拉丁小写字母)是一个字符。

字形 是用来呈现字符或字符序列的一种形状。在简单的书写系统(弯裤如拉丁文)中,通常一个字形就表示一个字符。但在一般情况下,字符和字形并没有一对一的对应关系。例如,字符 'á' A 的带重音符号的拉丁小写字母 可以由两个字形表示:一个是 'a',一个是 '´'。另一方面,两字符的字符串 "fi" 可以由单个字形 "fi" 连字表示。在复杂的书写系统(如阿拉伯语或南亚和东南亚语言)中,字符与字形之间的关系可能更复杂,涉及到依赖于上下文的字形选择以及字形重排序。字体封装了呈现所选择的字符集所需的字形集,还封装了将字符序列映射到纤闹老相应的字形序列所需的表。

4、字体外观和名称

Font 可以有多个外观,如 heavy、medium、oblique、gothic 和 regular。所有这些外观都有相似的排字设计。

可以从 Font 对象获得三种不同的名称。逻辑字体名称 只是用来构造字体的名称。字体外观名称,或外观名称 是特定字体外观的名称,如 Helvetica Bold。系列名称 是字体系列的名称,用来确定多种外观(如 Helvetica)的排字设计。

Font 类表示字体外观集合中字体外观的实例,字体外观集合位于主机系统的系统资源中。例如,Arial Bold 和 Courier Bold Italic 是字体外观。有几个 Font 对象与字体外观相关,每个对象在大小、样式、变换和字体特征上都有所不同。

GraphicsEnvironment 类的 getAllFonts 方法返回系统中所有可用字体外观组成的数组。这些字体外观被作为 Font 对象返回,对象的大小为 1,具有恒等变换和默认字体特征。这些基本字体可以用来派生新的 Font 对象,使之具有变化的大小、样式、变换和字体特征,这些可以通过此类中的 deriveFont 方法实现。

5、Font 和 TextAttribute

Font 支持大多数 TextAttribute。这使得一些 *** 作(如呈现带下划线的文本)变得更方便,因为没必要再显式构造一个 TextLayout 对象。通过使用 TextAttribute 值的 Map来构造或派生属性,可以在 Font 上设置属性。

一些 TextAttributes 值是不可序列化的,因此尝试序列化具有这样的值的 Font 实例不会使它们获得序列化。这意味着从这样一个流实现序列化的 Font 不会等同于包含不可序列化属性的原始 Font。这应该是很少出现的一个问题,因为这些属性通常只使用在特殊情况下并且不可能被序列化。

FOREGROUND 和 BACKGROUND 使用 Paint 值。子类 Color 是可序列化的,而 GradientPaint 和 TexturePaint 是不可序列化的。

CHAR_REPLACEMENT 使用 GraphicAttribute 值。子类 ShapeGraphicAttribute 和 ImageGraphicAttribute 是不可序列化的。

INPUT_METHOD_HIGHLIGHT 使用 InputMethodHighlight 值,它是不可序列化的。请参阅 InputMethodHighlight。

参考资料:http://www.apihome.cn/api/java/Font.html

用switch , 按照大小月 和是否闰年来判断每月的天数

1月大2月小, 1月则为31天 2月是个特殊情况 闰年为29天反之为28天!

思路我已经说了 具体代码编写很简单了

这是判断为蔽尺闰年的条件 (year%400==0)||(year%4==0&&year%100!=0) 我写宏型高了租槐段javasscript代码:

<script>

var year = 2010

for(var i=1i<=12i++){

switch(i){

case 1:

case 3:

case 5:

case 7:

case 8:

for(var j=1j<=31j++){

document.writeln(i+"/"+j)

}

break

case 2:

//判断是否为闰年

if((year%4===0&&year%100!==0)||year%400===0){

for(var j=1j<=29j++){

document.writeln(i+"/"+j)

}

break

}else{

for(var j=1j<=28j++){

document.writeln(i+"/"+j)

}

break

}

default:

for(var j=1j<=30j++){

document.writeln(i+"/"+j)

}

}

}

</script>

import java.awt.BorderLayout

import java.awt.Button

import java.awt.GridLayout

import java.awt.Label

import java.awt.Panel

import java.awt.ScrollPane

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.util.Calendar

import javax.swing.JApplet

public class Boy extends JApplet implements ActionListener {

Label a[] = new Label[42]

Button titleName[] = new Button[7]

String name[] = { "Monday", "Tuesday", "宴梁Wednesday", "Thursday", "friday",

"satuarday", "sunday" }

Button nextMonth, previousMonth

int year , month

CalendarBean calendar

Label showMessage = new Label("", Label.CENTER)

public void init() {

Calendar cal=Calendar.getInstance()

year=cal.get(Calendar.YEAR)

month=cal.get(Calendar.MONTH)+1

this.setLayout(new BorderLayout())

Panel pCenter = new Panel()

pCenter.setLayout(new GridLayout(7, 7))

for (int i = 0i <7i++) {

titleName[i] = new Button(name[i])

pCenter.add(titleName[i])

}

for (int i = 0i <42i++) {

a[i] = new Label("", Label.CENTER)

pCenter.add(a[i])

}

calendar = new CalendarBean()

calendar.setYear(year)

calendar.setMonth(month)

String day[] = calendar.getCalendar()

for (int i = 0i <42i++) {

a[i].setText(day[i])

}

nextMonth = new Button("下个月")

previousMonth = new Button("上个月")

nextMonth.addActionListener(this)

previousMonth.addActionListener(this)

Panel pNorth = new Panel(), pSouth = new Panel()

pNorth.add(previousMonth)

pNorth.add(nextMonth)

pSouth.add(showMessage)

showMessage.setText("日历物祥雹:" + calendar.getYear() + "年"

+ calendar.getMonth() + "月")

ScrollPane scollPane = new ScrollPane()

scollPane.add(pCenter)

add("Center", scollPane)

add("North", pNorth)

add("罩帆South", pSouth)

}

public void actionPerformed(ActionEvent e) {

month = month + 1

if (month >12) {

calendar.setMonth(month)

String day[] = calendar.getCalendar()

for (int i = 0i <42i++) {

a[i].setText(day[i])

}

if ((e.getSource()) == previousMonth) {

month = month - 1

if (month <1) {

month = 12

calendar.setMonth(month)

String day1[] = calendar.getCalendar()

for (int i = 0i <42i++) {

a[i].setText(day1[i])

}

showMessage.setText("日历:" + calendar.getYear() + "年"

+ calendar.getMonth() + "月")

}

}

}

}

}

class CalendarBean {

String day[]

int year, month

public void setYear(int year) {

this.year = year

}

public int getYear() {

return year

}

public void setMonth(int month) {

this.month = month

}

public int getMonth() {

return month

}

public String[] getCalendar() {

String a[] = new String[42]

Calendar calen = Calendar.getInstance()

calen.set(year, month - 1, 1)

int week = calen.get(Calendar.DAY_OF_WEEK)

int day = 0

if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8

|| month == 10 || month == 12) {

day = 31

}

if (month == 4 || month == 6 || month == 9 || month == 11) {

day = 30

}

if (month == 2) {

if (((year % 4 == 0) &&(year % 100 != 0)) || (year % 400 == 0)) {

day = 29

} else {

day = 28

}

}

for (int i = week, n = 1i <week + dayi++) {

a[i] = String.valueOf(n)

n++

}

return a

}

}

/**

**

**

**

**

**

**

**

*/

//下面是我写的

import java.awt.BorderLayout

import java.awt.Font

import java.awt.GridLayout

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.util.Calendar

import javax.swing.JApplet

import javax.swing.JButton

import javax.swing.JLabel

import javax.swing.JPanel

import javax.swing.JScrollPane

public class MyCalendar extends JApplet implements ActionListener {

public static Font font=new Font("宋体", 1, 18)//定义全局字体

private JLabel labels[] = new JLabel[42]

private JButton titleButns[] = new JButton[7]

private String name[] = { "星期一", "星期二", "星期三", "星期四", "星期五",

"星期六", "星期日" }

private JButton nextMonth, previousMonth

private JLabel showMessage = new JLabel("")

private Calendar currentCal=Calendar.getInstance()//当前日历

public void init() {

this.setLayout(new BorderLayout())

JPanel pCenter = new JPanel()

pCenter.setLayout(new GridLayout(7, 7))

for (int i = 0i <7i++) {

titleButns[i] = new JButton(name[i])

pCenter.add(titleButns[i])

}

for (int i = 0i <42i++) {

labels[i] = new JLabel("",JLabel.CENTER)

labels[i].setFont(font)

pCenter.add(labels[i])

}

nextMonth = new JButton("下个月")

previousMonth = new JButton("上个月")

nextMonth.addActionListener(this)

previousMonth.addActionListener(this)

JPanel pNorth = new JPanel(), pSouth = new JPanel()

pNorth.add(previousMonth)

pNorth.add(nextMonth)

showMessage.setFont(font)

pSouth.add(showMessage)

JScrollPane scollPane = new JScrollPane(pCenter)

add("Center", scollPane)

add("North", pNorth)

add("South", pSouth)

showCalendar()//显示日历

}

private void initDays(Calendar calendar) {

calendar.set(Calendar.DAY_OF_MONTH, 1)//设置时间为该月第一天

int weekDay=calendar.get(Calendar.DAY_OF_WEEK)//从星期天开始,星期天为1,星期六为7

if(weekDay==1)//星期天

weekDay=7

else {

weekDay=weekDay-1

}

int monthDays=getMonthDays(calendar)

for (int i = 0,n=1i<42i++) {

if(i<weekDay-1||n>monthDays){

labels[i].setText("")

}else {

labels[i].setText(n+"")

n++

}

}

}

private void showCalendar(){

initDays(currentCal)

showMessage.setText("日历:" +currentCal.get(Calendar.YEAR) + "年"

+ (currentCal.get(Calendar.MONTH)+1) + "月")

}

private int getMonthDays(Calendar calendar){//得到某个月的天数

int days[]={31,28,31,30,31,30,31,31,30,31,30,31}

int month=calendar.get(Calendar.MONTH)

if(month==1){

int year=calendar.get(Calendar.YEAR)

if((year%400==0)||(year%4==0&&year%100!=0))

return 29

}

return days[month]

}

@Override

public void actionPerformed(ActionEvent e) {

if(e.getSource()==nextMonth){

currentCal.add(Calendar.MONTH, 1)

showCalendar()

}else if(e.getSource()==previousMonth){

currentCal.add(Calendar.MONTH, -1)

showCalendar()

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12487489.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存