admin管理员组

文章数量:1612066

2023年12月30日发(作者:)

1.

功能分析

功能逻辑图:

打开文件

文件

退出

字体

格式

颜色

背景颜色

txt

小说阅读器

滚屏速度

查找

查找

帮助信息

帮助

关于

首页

上一页

底部按钮

自动滚屏

下一页

尾页

根据功能逻辑分析图,txt小说阅读器应该具备以下功能:

[1]文件的打开及关闭

[2]字体的设置

[3]查找功能

[4]底部按钮(首页、尾页、上一页,下一页,滚屏)

[5]双击窗体自动滚屏,单击窗体停止滚屏

2. 功能实现、设计,分析

2.1文件的打开

2.1.1功能实现

2.1.2功能设计

实现的关键代码:

[1]监视器:

ionListener(new ActionListener() { //打开

public void actionPerformed(ActionEvent e) {

fileOpen();

}

});

[2]

private void fileOpen() { //文件对话框

int flag=enDialog(this);

if(flag==E_OPTION)

{

//获得该文件

File f=ectedFile();

t(null);

try{

File dir = rentDirectory();

//返回当前目录

String

name=ectedFile().getName();

File file=new File(dir,name);

fileReader = new FileReader(file);

in=new BufferedReader(fileReader);

String s=null;

while((s=ne())!=null){

(s+"n");

}

();

();

etPosition(0);

//让一开始滚动条就在最上方

}

catch(IOException exp){}

}

}

2.1.3 功能分析

经过实验及测试,实现的文件对话框可以正常打开任何文件txt文件,但打开doc文件时会出现乱码的情况

2.2字体的设置

2.2.1功能实现

2.2.2功能设计

实现的关键代码:

[1]监视器:

ionListener(new ActionListener() { //字体设置

public void actionPerformed(ActionEvent e) {

ntHandler();

}

});

[2]

class font { //字体设置

private JTextArea textArea;

private JButton ok, cancel;

private JComboBox fontName, fontSize, fontStyle;

GraphicsEnvironment ge;// 定义系统字体对象

String[] size = { "8", "10", "12", "14", "16", "18", "20", "22",

"24", "26", "28", "32", "36", "48", "72", "96" };

String[] style = { "PLAIN", "BOLD", "ITALIC" };

JFrame jf = new JFrame("字体设置");

public font(JTextArea textArea) {

ea = textArea;

JLabel label1 = new JLabel(" 字体 ");

JLabel label2 = new JLabel(" 字号 ");

JLabel label3 = new JLabel(" 样式 ");

ge =

alGraphicsEnvironment();// 获取系统字体

String[] fontname = ilableFontFamilyNames();

fontName = new JComboBox(fontname);

fontSize = new JComboBox(size);

fontStyle = new JComboBox(style);

ok = new JButton("确定");

cancel = new JButton("取消");

out(new BorderLayout());

JPanel p1 = new JPanel(); //P236

JPanel p2 = new JPanel();

JPanel p3 = new JPanel();

(label1);

(label2);

(label3);

(fontName);

(fontSize);

(fontStyle);

(ok);

(cancel);

(p1, ); //布局,放置的位置

(p2, );

(p3, );

e(360, 200);

ation(300, 200);

ible(false);

izable(false);//大小不可调整

}

public void addEventHandler() {

// TODO Auto-generated method stub

ible(true); //由原先的不可见-->可见

ionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

String n1 = (String) ectedItem();

int n2 = ectedIndex();

String n3 = (String) ectedItem();

t(new Font(n1, n2,

nt(n3)));

ible(false); //点击“确定”按钮后-->不可见

}

});

ionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

ible(false);

// 若是点击了“取消”按钮-->仅仅让对话框消失即可

}

});

}

}

2.2.3 功能分析

实现设置字体的该窗体可以实现设置字体的类型、大小、颜色、是否加粗、倾斜等设置,但当设置为一些字体类型时,文本会出现乱码的情况,原因可能是字体编码不一样导致的

2.3查找功能

2.3.1功能实现

2.3.2功能设计

实现的关键代码:

[1]监视器:

ionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

findtest = new Find(textArea,x,y);

t();

}

});

[2]

import .*;

import .*;

import .*;

import .*;

public class Find implements ActionListener,DocumentListener{

private JFrame jframe;

private JLabel jlabel;

private JTextField jtextFile;

private JButton jbtNext;

private JButton jbtCancel;

JTextArea textArea;

int i=0;

int x,y;

public Find(JTextArea textArea,int x,int y) {

this.x=x;

this.y=y;

ea = textArea;

jframe = new JFrame();

jlabel = new JLabel("查找内容:");

jtextFile= new JTextField(10);

jbtNext = new JButton("查找下一个");

jbtCancel = new JButton("取消");

out(new FlowLayout());

(jlabel);

(jtextFile);

(jbtNext);

(jbtCancel);

nds(x+200,y+200,220, 120);

ible(false);

//table(true);

aultCloseOperation(_ON_CLOSE);

//();

}

void findset() {

ible(true);

ionListener(this);

ionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {

ible(false);

}

//一旦点击“取消”按钮后对话框马上消失

t(null);//点击“取消”按钮之后,文本框清空

i=0;//点击“取消”按钮之后,i重新赋值0,即下一次查找从头开始

}

});

(ument()).addDocumentListener(this);

//监视文本框P251

@Override

public void actionPerformed(ActionEvent e) {

String string= t().trim();//获取文本框中的内容

if(!("".equals(string))){ //空字符串与用户输入的字符串作比较 P189

String str=t(); //获取textArea的内容

if(i!=-1) //防止当i=-1时,下面这行代码会把i=-1重新赋值,导致从头再查找-->查找到尾部后不允许从头重新查找

i=f(string,i);//192

if(i>=0){

ectionStart(i);

ectionEnd(i + ());

}

else{

ssageDialog(null,"没有找到 "+string);//消息对话框P285,放置在屏幕中间

}

}else{

}

ssageDialog(null,"输入不能为空");

}

if(i!=(-1)){//为了能继续查找下一个关键字

i+=1;

}

//n(i);

//监听文本框 文本框一旦改变(增加、删除、改变),i=0

@Override

public void changedUpdate(DocumentEvent arg0) { //没有下面两个函数,查找一次到头了就不能再继续查找下一次了(即使修改查找内容)

// TODO Auto-generated method stub

i=0;

}

@Override

public void insertUpdate(DocumentEvent arg0) {//在查找内容的基础上删除

// TODO Auto-generated method stub

changedUpdate(arg0);

}

}

@Override

public void removeUpdate(DocumentEvent arg0) {//在查找内容的基础上删除

// TODO Auto-generated method stub

changedUpdate(arg0);

}

2.3.3功能分析

经过试验,测试,改进,以及再测试,该查找功能能完善地实现查找的功能,精确定位到关键字,符合查找的规则

2.4自动滚屏

2.4.1功能实现

2.4.2功能设计

实现的关键代码:

Timer timer = new Timer(delay, new ActionListener() {

public void actionPerformed(ActionEvent evt) {

ue(ue() + tIncrement());

} //设置滚动条的值

});

seListener(new MouseListener() {

//监听鼠标的点击数,执行相应的操作 P252

public void mouseClicked(MouseEvent e) {

if (ckCount() == 2) { //滚屏

//();

count=1; //为的是与底部的“滚屏按钮对应”

(); //为的是与底部的“滚屏按钮对应”

t("暂停滚屏");

}

if (ckCount() == 1) { //停止滚屏

//();

count=0;

();

t("自动滚屏");

}

}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mousePressed(MouseEvent e) {}

public void mouseReleased(MouseEvent e) {}

});

或者:

ionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

if((++count)%2==1){ //滚屏

();

t("暂停滚屏");

}else{ //停止滚屏

();

t("自动滚屏");

}

}

});

2.4.3功能分析

经过试验,测试,改进,以及再测试,点击窗体下方的“自动/暂停滚屏”按钮可以实现滚屏或是暂停滚屏。鼠标双击/单击窗体,可以实现实现滚屏或是暂停滚屏,并且与窗体下方的“自动/暂停滚屏”按钮的文字相互协调、互相一致,保持同步

2.5设计滚屏速度

2.5.1功能实现

2.5.2功能设计

实现的关键代码:

[1]监视器:

ionListener(new ActionListener() { //滚屏速度的设置

public void actionPerformed(ActionEvent e) {

();

}

});

[2]

import .*;

import .*;

import .*;

class Speed implements ItemListener {

}

private JScrollBar jsb;

private JFrame jfrm;

private JLabel jlb1;

private JButton jbt;

private JComboBox jcbb;

Integer sudu; //速度

Timer timer; //计时器

private Integer msg[] = { 1, 2, 3, 4, 5, 6, 7, 8 };

public Speed(final JScrollBar jsb, final Timer timer) {

= jsb;

= timer;

jfrm = new JFrame();

jlb1 = new JLabel("滚屏速度");

jbt = new JButton("确定");

jcbb = new JComboBox(msg);

out(new FlowLayout());

(jlb1);

(jcbb);

(jbt);

ible(false);

table(true);

aultCloseOperation(_ON_CLOSE);

();

}

void liser() {

ible(true);

mListener(this);//*************************关键

ionListener(new ActionListener() { //“确定”按钮的监听

public void actionPerformed(ActionEvent arg0) {

ible(false); //一旦点击“确定”按钮后对话框马上消失

}

});

}

@Override

public void itemStateChanged(ItemEvent arg0) {

sudu = (Integer) ectedItem();

tIncrement(ue());

}

2.5.3功能分析

经过试验及测试,该功能可以实现对滚屏速度的设置,而且设置合理

2.6分页

2.6.1功能实现

2.6.2功能设计

[1]上一页:

ionListener(new ActionListener() { //上一页

public void actionPerformed(ActionEvent e) {

jspValue=ticalScrollBar().getValue();

ticalScrollBar().setValue(jspValue-=ght());

}

});

[2]下一页:

ionListener(new ActionListener() { //下一页

public void actionPerformed(ActionEvent e) {

jspValue=ticalScrollBar().getValue();

ticalScrollBar().setValue(jspValue+=ght())

}

});

[3]首页:

ionListener(new ActionListener() { //首页

public void actionPerformed(ActionEvent e) {

ticalScrollBar().setValue(HEIGHT);//顶点

}

});

[4]尾页:

ionListener(new ActionListener() { //尾页

public void actionPerformed(ActionEvent e) {

ue(imum());

}

});

2.6.3功能分析

经过试验及测试,以上4个功能按钮完全可以实现上下翻页、返回首尾页,满足读者阅读小说的需要

3. 学习心得

在前期准备过程中,先要策划好自己所要表达的内容,主要实现哪些功能,如上一页、下一页、打开、退出、字体设置,查找等,在编写好这些功能后,又是怎么样在面板中布局这些都是我们事先要考虑的问题,只有这样我们考虑周到了,明白了,才能顺利实现更多的功能,达到事半功倍的效果。

对于java语言编程,我们决不能只看不编写。只有自己亲手做了才能体会到学习java语言编程的快乐以及奥妙,也只有自己亲手做了才能学到更多的知识,自己才可以学会应用java语言的知识来解决我们现实生活中的一些实际问题。

学习java语言已经一个学期了,在这个学期,踉踉跄跄,学得不精,还得再下很大的功夫才能领会到它的博大精深,而我只是学习了皮毛而已,许多人把其一生奉献给它,它是另一个世界的通行证。

通过本项目的练习,发现自己在java基础上还是很薄弱,对一些java类掌握的还不够扎实,对一些知识还不够了解,发现写程序和读程序还是有着本质上的区别,自己敲的代码太少,同时这个程序还不够完善,如分页功能还没有完全实现等等,在以后的java学习中需要更加的用心去学

本文标签: 实现查找功能滚屏按钮