中南林业科技大学
课程
设计名称: 字体对话框
姓 名: 张旭 学 号: 20124575
专业班级: 计算机科学与技术一班
院(系): 计算机与信息
学院
设计时间: 2014年 01月10日
设计地点: 电子信息楼603机房
指导教师评语: 成绩:
签名:
2013 年 1 月 11 日
Java程序设计课程设计任务
计算机与信息工程 院系 计算机科学与技术 教研室
学 号
20124575
学生姓名
张旭
专业(班级)
计算机科学
与技术2012级
设计题目
字体对话框
设计目的
1.深入理解Java面向对象的设计思想
2.提高用Java语言编程的能力
3.学会制作软件开发文档
设
计
要
求
1.编写一个FontFamily类,该类对象可以获取当前机器可用的全部字体名称;
2.编写一个Dialog的子类:FontDialog,该类为FontFamily对象维护的数据提供视图;
3.编写一个窗口,该窗口有“设置字体”按钮和一个文本区对象,当单击该按钮时,弹出一个FontDialog创建的对话框,然后根据用户在对话框下拉列表中选择的字体来显示文本区中的文本;
4.在FontDialog对话框中设置字体字号、加粗、倾斜、下划线等功能。
工
作
计
划
1. 概要设计(说明本程序中用到的所有数据的定义、程序的流程图以及各程序模块之间的调用关系)
2. 详细设计(列出关键代码的设计与分析,关键代码后必须有中文注释)
3.程序测试(列出测试结果,包括输入和输出,测试数据应该完整和严格)
4.制作API文档
5.编写课程设计说明书
工
作
成
果
1. 按要求写出课程设计说明书(含电子文档)
2. 提供完整的源程序代码
3.提供API文档
参
考
资
料
1. Java程序设计教程(第2版) 雍俊海 编著 清华大学出版社
2. Java 2实用教程(第4版)耿祥义等 编著 清华大学出版社
指导教师签字
教研室主任签字
2013年12月 30 日
设计思想概述:
本程序的要求为:
1.编写一个FontFamily类,该类对象可以获取当前机器可用的全部字体名称;
2.编写一个Dialog的子类:FontDialog,该类为FontFamily对象维护的数据提供视图;
3.编写一个窗口,该窗口有“设置字体”按钮和一个文本区对象,当单击该按钮时,弹出一个FontDialog创建的对话框,然后根据用户在对话框下拉列表中选择的字体来显示文本区中的文本;
4.在FontDialog对话框中设置字体字号、加粗、倾斜、下划线等功能。
字体对话框主体结构
(1)创建一个窗口容器container,设置窗口布局,给窗口添加背景颜色,然后在container里声明要添加文本框 按钮。
(2)创建监听器(给按钮添加监视)
(3)创建一个新的JFontDialog类的窗口,设置布局再向窗口添加文本框按钮,设置窗口位置,窗口可见,在创建监听器(定义菜单监视器)
(4)给字体添加功能:读取Windows中已有的字体,改变字体颜色,改变字体大小,改变字体样式等功能添加到窗口中。
程序流程图:
字体对话框流程图
源代码:
类一:Test
import javax.swing.JFrame;
/**
* 在主类中创建一个对象dialog
* @author 张旭
* @version 1.0
*/
public class Test {
public static void main(String[]lsg){
JFontDialogTest dialog = new JFontDialogTest();
dialog.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
类二:JFontDialog
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.border.*;
/**
* 在JFontDialog类中声明文本框,声明一个按钮型的数组,声明一个JFontDialogTest类对象
* 创建Color型数组并赋值
*
*/
public class JFontDialog extends JDialog {
private static final long serialVersionUID = 1L;//?
JList fontpolics, fontstyle, fontsize, fontcolor;
JTextField fontpolict, fontstylet, fontsizet, fontcolort;//声明文本框
JButton[] ColorButton;//声明一个按钮型的数组
private JFontDialogTest frame;//声明一个JFontDialogTest类对象
JPanel FontSet, FontView;
JLabel FontResolvent;
JButton buttonok, buttoncancel;
//创建Color型数组并赋值
Color[] colors = { Color.BLACK, Color.BLUE, Color.CYAN, Color.DARK_GRAY,
Color.GRAY, Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA,
Color.ORANGE, Color.PINK, Color.RED, Color.WHITE, Color.YELLOW };
String[] colornames = { "BLACK", "BLUE", "CYAN", "DARK_GRAY", "GRAY",
"GREEN", "LIGHT_GRAY", "MAGENTA", "ORANGE", "PINK", "RED", "WHITE",
"YELLOW" };
String example="张旭";
/**
*
* @param 定义JFontDialog的构造
* @param 创建container
* 用panel.setLayout设置该容器的布局
* 创建FontResolvent标签并设置了其位 ListSelectionListener定义菜单选择监视器定义键盘监视器
* 设置修改字体,大小,样式,颜色的方法
*/
public JFontDialog(JFontDialogTest owner, String title, boolean modal) {//定义JFontDialog的构造方法
super(owner, title, modal);//?
Container container = getContentPane();
container. setLayout(new BorderLayout());
this.frame = owner;//?
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2, 1));//设置该容器的布局
FontSet = new JPanel(new GridLayout(1, 4));
FontView = new JPanel(new GridLayout(1, 2));
//this.add(panel, BorderLayout.CENTER);
//this. setBounds(280,100,800,600);
//this.setVisible(true);
FontResolvent = new JLabel(example, JLabel.CENTER);//创建了该标签并设置了其位置
FontResolvent.setBackground(Color.WHITE);
//定义菜单选择监视器
ListSelectionListener selectionListener = new ListSelectionListener() {//匿名类,ListSelectionListener的子类对象
//处理事件,根据所选的菜单来进行不同类型的处理
public void valueChanged(ListSelectionEvent e) {
if (((JList) e.getSource()).getName().equals("polic")) {
fontpolict.setText((String) fontpolics.getSelectedValue());
FontResolvent.setFont(new Font(fontpolict.getText(), FontResolvent.getFont().getStyle(), FontResolvent.getFont().getSize()));
}
if (((JList) e.getSource()).getName().equals("style")) {
fontstylet.setText((String) fontstyle.getSelectedValue());
FontResolvent.setFont(new Font(FontResolvent.getFont().getFontName(), fontstyle.getSelectedIndex(),FontResolvent.getFont().getSize()));
}
if (((JList) e.getSource()).getName().equals("size")) {
fontsizet.setText((String) fontsize.getSelectedValue());
try {
Integer.parseInt(fontsizet.getText());
} catch (Exception excepInt) {
fontsizet.setText(FontResolvent.getFont().getSize()+ "");
}
FontResolvent.setFont(new Font(FontResolvent.getFont().getFontName(), FontResolvent.getFont().getStyle(),Integer.parseInt(fontsizet.getText())));
}
if (((JList) e.getSource()).getName().equals("color")) {
fontcolort.setText(colornames[fontcolor.getSelectedIndex()]);
FontResolvent.setForeground(colors[fontcolor.getSelectedIndex()]);
}
}
};
//定义键盘监视器
/* KeyListener keyListener = new KeyListener() {
//处理键盘事件
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == 10) {
if (((JTextField) e.getSource()).getName().equals("polic")) {
FontResolvent.setFont(new Font(fontpolict.getText(),FontResolvent.getFont().getStyle(),FontResolvent.getFont().getSize()));
}
if (((JTextField) e.getSource()).getName().equals("style")) {
fontstylet.setText((String) fontstyle.getSelectedValue());
FontResolvent.setFont(new Font(FontResolvent.getFont().getFontName(), fontstyle.getSelectedIndex(),FontResolvent.getFont().getSize()));
}
if (((JTextField) e.getSource()).getName().equals("size")) {
try {
Integer.parseInt(fontsizet.getText());
} catch (Exception excepInt) {
fontsizet.setText(FontResolvent.getFont().getSize()+ "");
}
FontResolvent.setFont(new Font(FontResolvent.getFont().getFontName(), FontResolvent.getFont().getStyle(), Integer.parseInt(fontsizet.getText())));
}
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
};*/
// 字体
JPanel Fontpolic = new JPanel();
Border border = BorderFactory.createLoweredBevelBorder();
border = BorderFactory.createTitledBorder(border, "字体");
Fontpolic.setBorder(border);
Font[] fonts = java.awt.GraphicsEnvironment
.getLocalGraphicsEnvironment().getAllFonts();
int taille = fonts.length;
String[] policnames = new String[taille];
for (int i = 0; i < taille; i++) {
policnames[i] = fonts[i].getName();
}
fontpolics = new JList(policnames);
fontpolics.setName("polic");
fontpolics.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
fontpolics.addListSelectionListener(selectionListener);
fontpolics.setVisibleRowCount(6);
fontpolict = new JTextField(policnames[0]);
fontpolict.setName("polic");
//fontpolict.addKeyListener(keyListener);
JScrollPane jspfontpolic = new JScrollPane(fontpolics);
Fontpolic.setLayout(new BoxLayout(Fontpolic, BoxLayout.PAGE_AXIS));
Fontpolic.add(fontpolict);
Fontpolic.add(jspfontpolic);
// 样式
JPanel Fontstyle = new JPanel();
border = BorderFactory.createLoweredBevelBorder();
border = BorderFactory.createTitledBorder(border, "样式");
Fontstyle.setBorder(border);
String[] styles = { "PLAIN", "BOLD", "ITALIC", "BOLD ITALIC" };
fontstyle = new JList(styles);
fontstyle.setName("style");
fontstyle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
fontstyle.addListSelectionListener(selectionListener);
fontstyle.setVisibleRowCount(6);
fontstylet = new JTextField(styles[0]);
fontstylet.setName("style");
// fontstylet.addKeyListener(keyListener);
JScrollPane jspfontstyle = new JScrollPane(fontstyle);
Fontstyle.setLayout(new BoxLayout(Fontstyle, BoxLayout.PAGE_AXIS));
Fontstyle.add(fontstylet);
Fontstyle.add(jspfontstyle);
// 大小
JPanel Fontsize = new JPanel();
border = BorderFactory.createLoweredBevelBorder();
border = BorderFactory.createTitledBorder(border, "大小");
Fontsize.setBorder(border);
String[] sizes = { "30", "40", "50", "60", "70", "80" };
fontsize = new JList(sizes);
fontsize.setName("size");
fontsize.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
fontsize.addListSelectionListener(selectionListener);
fontsize.setVisibleRowCount(6);
fontsizet = new JTextField(sizes[0]);
fontsizet.setName("size");
//fontsizet.addKeyListener(keyListener);
JScrollPane jspfontsize = new JScrollPane(fontsize);
Fontsize.setLayout(new BoxLayout(Fontsize, BoxLayout.PAGE_AXIS));
Fontsize.add(fontsizet);
Fontsize.add(jspfontsize);
// 颜色
JPanel Fontcolor = new JPanel();
Border bordercolor = BorderFactory.createLoweredBevelBorder();
bordercolor = BorderFactory.createTitledBorder(bordercolor, "颜色");
Fontcolor.setBorder(bordercolor);
fontcolor = new JList(colornames);
fontcolor.setName("color");
fontcolor.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
fontcolor.addListSelectionListener(selectionListener);
fontcolor.setVisibleRowCount(6);
fontcolort = new JTextField(colornames[0].toString());
fontcolort.setName("color");
//fontcolort.addKeyListener(keyListener);
JScrollPane jspfontcolor = new JScrollPane(fontcolor);
Fontcolor.setLayout(new BoxLayout(Fontcolor, BoxLayout.PAGE_AXIS));
Fontcolor.add(fontcolort);
Fontcolor.add(jspfontcolor);
FontSet.add(Fontpolic);
FontSet.add(Fontstyle);
FontSet.add(Fontsize);
FontSet.add(Fontcolor);
FontView.add(FontResolvent);
panel.add(FontSet);
panel.add(FontView);
JPanel panelnorth = new JPanel();
panelnorth.setLayout(new FlowLayout());
buttonok = new JButton("确定");
buttoncancel = new JButton("取消");
panelnorth.add(buttonok);
panelnorth.add(buttoncancel);
buttonok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.testLabel.setFont(FontResolvent.getFont());
frame.testLabel.setForeground(FontResolvent.getForeground());
JFontDialog.this.setVisible(false);
}
});
buttoncancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFontDialog.this.setVisible(false);
}
});
container.add(panel, BorderLayout.CENTER);
container.add(panelnorth, BorderLayout.SOUTH);
setBounds(280,100,800,600);
this.setVisible(true);
}
}
类三:JFontDialogTest
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JButton;
import java.awt.Font;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
/**
* 在JFontDialogTest中定义所需的数据serialVersionUID
* 定义构造方法JFontDialogTest()
* 设置主体框标题("字体设置框")
*创建一个容器getContentPane(),设置该容器的布局container.setLayout,设置字体对话框颜色 container.setBackground
*给该标签上的”作者:张旭“设置字体及大小
*在容器上添加标签,设置“设置字体”按钮,给该按钮添加监视器
*创建一个新的JFontDialog类 的窗口该容器添加此按钮并设置其所在位置
*用setBounds设置主体框在桌面上显示的位置,setVisible(true设置窗口可见
*/
public class JFontDialogTest extends JFrame{
//定义所需的数据
private static final long serialVersionUID = 1L;//?
public JLabel testLabel ;
private JButton fontButton ;
public JFontDialogTest(){//定义构造方法
super("字体设置框");//主体框标题
Container container = getContentPane();//创建一个容器
container.setLayout(new BorderLayout());//设置该容器的布局
container.setBackground(Color.red);//设置字体对话框颜色
testLabel = new JLabel("作者:张旭", SwingConstants.CENTER);
testLabel.setFont(new Font("", Font.BOLD, 26));//给该标签上的”作者:张旭“设置字体及大小
container.add(testLabel, BorderLayout.CENTER);//在容器上添加该标签
fontButton = new JButton("设置字体");//设置“设置字体”按钮
fontButton.addActionListener(new ActionListener(){//给该按钮添加监视器(匿名类)
public void actionPerformed(ActionEvent e) {
new JFontDialog(JFontDialogTest.this, "设置字体", true);//创建一个新的JFontDialog类 的窗口
}
});
container.add(fontButton, BorderLayout.SOUTH);//该容器添加此按钮并设置其所在位置
setBounds(280,100,800,600);//设置主体框在桌面上显示的位置
setVisible(true);//设置窗口可见
}
}
运行结果:
01:隶书,加粗,倾斜,绿色,80号
02:毛泽东字体,加粗,倾斜,70号,
03:文鼎习字体,倾斜,70号,蓝色
总结报告:
a:课程设计中所遇到的主要问题和解决方法:在本次字体对话框的课程设计中,所遇到的问题有不知道如何通过代码访问Windows中已安装的字体,和主体框的创建,之后通过课程指导时,问同学和看书,参考一些网络的资料得以解决!
b:创新和得意之处:通过向同学请教学会了在主体框背景添加了颜色,给字体添加了颜色的功能!
c:课程设计中存在的不足,需要进一步改进的设想:本次字体对话框课程设计中不足之处有很多,最大的不足之处是没有在字体对话框中添加下划线功能,这是最大的不足之处,通过参考些网络资料,和一些文献,能弥补这个不足!
d:课程设计的感想和心得体会:我在学习了Java之后,发现Java在现实生活中的应用非常广,以及Java课程学习的重要性,而我们所学的知识都只是最基础的东西,是沧海一粟。想要学习更深、更专业的东西,我必须不仅在电脑上多操作,还需要更加深度的加深理解力,尤其在编写实用的软件时,更是需要。所以,只有在现在打好基础,以后才能更好的运用。通过这次的课程设计,我学到了很多,在单纯掌握实际操作的基础上,必须加强与计算机网络有关的其他方面的学习,如英语。总 之,这 次 的 实 验 提 高 了 我 的动手实践能力,也使我对Java更加有兴趣。Java面向对象程序设计是我们专业的一门主要的专业基础课程,其实践性和应用性很强,在加深对许多理论知识的了解,也要注重实践与理论的结合,让我学的更有成效。今后的我会更加努力向学习的更深处前进!
参考文献:
1. Java程序设计教程(第2版) 雍俊海 编著 清华大学出版社
2. Java 2实用教程(第4版)耿祥义等 编著 清华大学出版社