收藏 分销(赏)

Javatxt小说阅读器实验报告.doc

上传人:a199****6536 文档编号:10675867 上传时间:2025-06-08 格式:DOC 页数:26 大小:315.04KB 下载积分:10 金币
下载 相关 举报
Javatxt小说阅读器实验报告.doc_第1页
第1页 / 共26页
Javatxt小说阅读器实验报告.doc_第2页
第2页 / 共26页


点击查看更多>>
资源描述
Javatxt小说阅读器实验报告 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) { (); } }); [2] private void () { //文件对话框 int flag=.showOpenDialog(this); if(flag==J.APPROVE_OPTION) { //获得该文件 (); textArea.setText(null); try{ = .getCurrentDirectory(); //返回当前目录 String name=.getSelectedFile().getName(); ); = new (file); in=new BufferedReader(); String s=null; while((s=in.readLine())!=null){ textArea.append(s+"\n"); } in.close(); .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); //jtext(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); //一旦点击“取消”按钮后对话框马上消失 jtext(null);//点击“取消”按钮之后,文本框清空 i=0;//点击“取消”按钮之后,i重新赋值0,即下一次查找从头开始 } }); (jtext()).addDocumentListener(this); //监视文本框P251 } @Override public void actionPerformed(ActionEvent e) { String string= jtext().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学习中需要更加的用心去学 26 / 26
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服