搜索
您的当前位置:首页Java txt小说阅读器实验报告

Java txt小说阅读器实验报告

来源:智榕旅游


1. 功能分析

功能逻辑图: 打开文件 文件 退出 字体 格式 颜色 背景颜色 txt 小说阅读器 滚屏速度 查找 查找 帮助信息 帮助 关于 首页 上一页 底部按钮 自动滚屏 下一页 尾页

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

[1]文件的打开及关闭 [2]字体的设置 [3]查找功能

[4]底部按钮(首页、尾页、上一页,下一页,滚屏) [5]双击窗体自动滚屏,单击窗体停止滚屏

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

2.1文件的打开

2.1.1功能实现

2.1.2功能设计

实现的关键代码:

[1]监视器:

open.addActionListener(new ActionListener() { //打开 public void actionPerformed(ActionEvent e) { fileOpen(); } }); [2]

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

int flag=fileDialog.showOpenDialog(this);

if(flag==JFileChooser.APPROVE_OPTION) {

//获得该文件

File f=fileDialog.getSelectedFile(); textArea.setText(null); try{

File dir = fileDialog.getCurrentDirectory(); //返回当前目录

String

name=fileDialog.getSelectedFile().getName();

File file=new File(dir,name);

fileReader = new FileReader(file); in=new BufferedReader(fileReader); String s=null;

while((s=in.readLine())!=null){ textArea.append(s+\"\\n\"); }

in.close();

fileReader.close();

textArea.setCaretPosition(0);

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

}

catch(IOException exp){} } }

2.1.3 功能分析

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

2.2字体的设置

2.2.1功能实现

2.2.2功能设计

实现的关键代码: [1]监视器:

font.addActionListener(new ActionListener() { //字体设置

public void actionPerformed(ActionEvent e) { font1.addEventHandler(); } }); [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) { this.textArea = textArea;

JLabel label1 = new JLabel(\" 字体 \"); JLabel label2 = new JLabel(\" 字号 \"); JLabel label3 = new JLabel(\" 样式 \");

ge =

GraphicsEnvironment.getLocalGraphicsEnvironment();// 获取系统字体 String[] fontname = ge.getAvailableFontFamilyNames();

fontName = new JComboBox(fontname); fontSize = new JComboBox(size); fontStyle = new JComboBox(style);

ok = new JButton(\"确定\");

cancel = new JButton(\"取消\");

jf.setLayout(new BorderLayout());

JPanel p1 = new JPanel(); //P236 JPanel p2 = new JPanel(); JPanel p3 = new JPanel();

p1.add(label1); p1.add(label2); p1.add(label3);

p2.add(fontName); p2.add(fontSize); p2.add(fontStyle);

p3.add(ok);

p3.add(cancel);

jf.add(p1, BorderLayout.NORTH); //布局,放置的位置 jf.add(p2, BorderLayout.CENTER); jf.add(p3, BorderLayout.SOUTH);

jf.setSize(360, 200);

jf.setLocation(300, 200); jf.setVisible(false);

jf.setResizable(false);//大小不可调整 }

public void addEventHandler() {

// TODO Auto-generated method stub

jf.setVisible(true); //由原先的不可见-->可见

ok.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

String n1 = (String) fontName.getSelectedItem(); int n2 = fontStyle.getSelectedIndex();

String n3 = (String) fontSize.getSelectedItem(); textArea.setFont(new Font(n1, n2, Integer.parseInt(n3)));

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

} });

cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jf.setVisible(false);

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

2.2.3 功能分析

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

2.3查找功能

2.3.1功能实现

2.3.2功能设计

实现的关键代码: [1]监视器:

find.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) { findtest = new Find(textArea,x,y); findtest.findset(); } }); [2]

import java.awt.*;

import java.awt.event.*; import javax.swing.*;

import javax.swing.event.*;

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;

this.textArea = textArea; jframe = new JFrame();

jlabel = new JLabel(\"查找内容:\"); jtextFile= new JTextField(10);

jbtNext = new JButton(\"查找下一个\"); jbtCancel = new JButton(\"取消\"); jframe.setLayout(new FlowLayout());

jframe.add(jlabel); jframe.add(jtextFile); jframe.add(jbtNext); jframe.add(jbtCancel);

jframe.setBounds(x+200,y+200,220, 120); jframe.setVisible(false);

//jtextFile.setEditable(true);

jframe.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); //jframe.pack(); }

void findset() {

jframe.setVisible(true);

jbtNext.addActionListener(this);

jbtCancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { jframe.setVisible(false);

}

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

jtextFile.setText(null);//点击“取消”按钮之后,文本框清空 i=0;//点击“取消”按钮之后,i重新赋值0,即下一次查找从头开始

}

});

(jtextFile.getDocument()).addDocumentListener(this);

//监视文本框P251

@Override

public void actionPerformed(ActionEvent e) {

String string= jtextFile.getText().trim();//获取文本框中的内容 if(!(\"\".equals(string))){ //空字符串与用户输入的字符串作比较 P189 String str=textArea.getText(); //获取textArea的内容

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

i=str.indexOf(string,i);//192 if(i>=0){

textArea.setSelectionStart(i);

textArea.setSelectionEnd(i + string.length()); } else{

JOptionPane.showMessageDialog(null,\"没有找到 \"+string);//消息对话框P285,放置在屏幕中间 } }else{

}

JOptionPane.showMessageDialog(null,\"输入不能为空\"); }

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

//System.out.println(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) {

jsb.setValue(jsb.getValue() + jsb.getUnitIncrement()); } //设置滚动条的值 });

textArea.addMouseListener(new MouseListener() {

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

public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { //滚屏 //timer.start();

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

timer.start(); //为的是与底部的“滚屏按钮对应” roll.setText(\"暂停滚屏\"); }

if (e.getClickCount() == 1) { //停止滚屏 //timer.stop(); count=0;

timer.stop();

roll.setText(\"自动滚屏\"); } }

public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} }); 或者:

roll.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) { if((++count)%2==1){ //滚屏 timer.start();

roll.setText(\"暂停滚屏\"); }else{ //停止滚屏 timer.stop();

roll.setText(\"自动滚屏\"); } } });

2.4.3功能分析

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

2.5设计滚屏速度

2.5.1功能实现

2.5.2功能设计

实现的关键代码: [1]监视器:

speed.addActionListener(new ActionListener() { //滚屏速度的设置 public void actionPerformed(ActionEvent e) { sped.liser(); } }); [2]

import java.awt.*;

import java.awt.event.*; import javax.swing.*;

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) { this.jsb = jsb; this.timer = timer; jfrm = new JFrame(); jlb1 = new JLabel(\"滚屏速度\"); jbt = new JButton(\"确定\"); jcbb = new JComboBox(msg); jfrm.setLayout(new FlowLayout()); jfrm.add(jlb1); jfrm.add(jcbb); jfrm.add(jbt);

jfrm.setVisible(false); jcbb.setEditable(true); jfrm.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); jfrm.pack(); }

void liser() { jfrm.setVisible(true); jcbb.addItemListener(this);//*************************关键 jbt.addActionListener(new ActionListener() { //“确定”按钮的监听 public void actionPerformed(ActionEvent arg0) { jfrm.setVisible(false); //一旦点击“确定”按钮后对话框马上消失 } }); }

@Override

public void itemStateChanged(ItemEvent arg0) { sudu = (Integer) jcbb.getSelectedItem(); jsb.setUnitIncrement(sudu.intValue()); }

2.5.3功能分析

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

2.6分页

2.6.1功能实现

2.6.2功能设计

[1]上一页:

PageUp.addActionListener(new ActionListener() { //上一页 public void actionPerformed(ActionEvent e) {

jspValue=scroll.getVerticalScrollBar().getValue();

scroll.getVerticalScrollBar().setValue(jspValue-=scroll.getHeight());

} });

[2]下一页:

PageDown.addActionListener(new ActionListener() { //下一页

public void actionPerformed(ActionEvent e) {

jspValue=scroll.getVerticalScrollBar().getValue();

scroll.getVerticalScrollBar().setValue(jspValue+=scroll.getHeight()) } });

[3]首页:

HomePage.addActionListener(new ActionListener() { //首页 public void actionPerformed(ActionEvent e) {

scroll.getVerticalScrollBar().setValue(HEIGHT);//顶点

} });

[4]尾页:

EndPage.addActionListener(new ActionListener() { //尾页 public void actionPerformed(ActionEvent e) { jsb.setValue(jsb.getMaximum()); } });

2.6.3功能分析

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

3. 学习心得

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

对于java语言编程,我们决不能只看不编写。只有自己亲手做了才能体会到学习java语言编程的快乐以及奥妙,也只有自己亲手做了才能学到更多的知识,自己才可以学会应用java语言的知识来解决我们现实生活中的一些实际问题。 学习java语言已经一个学期了,在这个学期,踉踉跄跄,学得不精,还得再下很大的功夫才能领会到它的博大精深,而我只是学习了皮毛而已,许多人把其一生奉献给它,它是另一个世界的通行证。

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Top