物理 字体是实际的字体库,包含字形数据和表,这些数据和表使用字体技术(如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.BorderLayoutimport 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()
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)