简单的java文档扫描器

好久没写博客了,因为需要看的东西太多,需要学习的东西也太多。本人对java里面的东西也只是了解了大概。这几天写了一个文档扫描器,算是对之前的所学东西的一个总结吧。

在java中,每一个东西都可以抽象成一个类,(为了更好的使用这些东西,有的会被抽象成抽象类,或者接口。)对于那些具具体体的有血有肉的实物,就是一个对象。每一个对象都有自己拥有自己的属性,我们可以通过对象给我们提供方法经行某些操作。当然最重要的还是对象与对象之间的信息交互。

这些是一些简单的面向对象编程的思想。

下面一个简单的文档编辑扫描器。(暂时实现的功能有限)

       下面看代码(具体的注释都在上面)

       

package com.scnnerwords.mukever.www;

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

public class ScannerWord extends JFrame implements Runnable {
  
  private JTextArea jta;  //文本域
  private HistogramBarChart histogram = new HistogramBarChart();  //创建一个文件的扫描panel类
  private JFrame histogramFrame = new JFrame();//在框架中定义一个窗体

  public ScannerWord() {//构造函数
	histogramFrame.setLocation(100, 100);//设置条形图窗体位置
    histogramFrame.setSize(400,300);//设置条形图窗体大小
    histogramFrame.setVisible(true);//设置条形图可见
    JScrollPane scrollPane = new JScrollPane(jta = new JTextArea());//使文本具有滑动功能
    scrollPane.setPreferredSize(new Dimension(300, 200));//为文本域设置一个新的大小
    jta.setWrapStyleWord(true);//使文本不会出现断字现象
    jta.setLineWrap(true);//设置自动换行
    histogramFrame.add(histogram);//为窗体添加一个panel
    add(scrollPane);//将具有滑动功能的文本域的窗体添加到主窗体中
    histogramFrame.pack();//将条形图窗体打包一下
    histogramFrame.setTitle("字符统计");//设置条形图窗体的题目
  }

  class Listener implements ActionListener {  //监听者类
	  
	  public void actionPerformed(ActionEvent e) { //没监听到有Action发生就会调用此方法	
	    int[] count = countLetters();  //通过countLetter方法得到一个包含字符数
	    double[] data = new double[26];  //计算百分比
	    String[] letters = new String[26]; //得到相应字符,方便打印在panel上	    
	    for (int i = 0; i < 26; i++)
	      data[i] = count[i];
	    for (int i = 0; i < 26; i++)
	      letters[i] = "" + (char)('A' + i);
	    histogram.showHistogram(count);//调用histogram方法计算出相应的结果并画出条形图。
    
	  }
	
	  private int[] countLetters() {
	    
	    int[] count = new int[26];  //声明一个数组
	    String text = jta.getText();//得到jta的字符串
	
	    for (int i=0; i= 'A') && (character <= 'Z')) {
	        count[(int)character - 65]++; 
	      }
	      else if ((character >= 'a') && (character <= 'z')) {
	        count[(int)character - 97]++; 
	      }
	    }
	    return count; //返回一个数组
	  }
  }
  
  public void run(){//实现了一个Runnable接口,并实现了run方法,同时声明一个定时器,每1ms就会触发一次Action,
	                //并会被Listner监听到,监听者就会调用相应的方法来处理。
	                //到此处就实现了对输入文本扫描的动态展现。
	   Timer timer = new Timer(1, new Listener());
	    timer.start();//触发器
  }
  public static void main(String[] args) {
    ScannerWord frame = new ScannerWord();//生成一个主窗体
    //设置相应的信息
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("文件扫描仪");
    frame.pack();
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true);
    //启动一个线程----一边输入,一同统计,并且动态展现
    Thread time = new Thread(frame);
    time.start();
  }
}
下面是另外一个类

package com.scnnerwords.mukever.www;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;

public class HistogramBarChart extends JPanel{
	private int [] count;
	
	public void showHistogram(int [] count){//得到更改后重画图形
		this.count = count;
		repaint();//调用paintComponent()方法再次重画
	}
	protected void paintComponent(Graphics g) {  //在本panel上重画相应的条形图
		if(count == null) return; //没有得到count就不会在panel上画图
		
		super.paintComponent(g);//得到一个简单的画笔
		
		int width = getWidth();//得到panel的宽度
		int height = getHeight();//得到panel的高度
		int interval = (width-40)/count.length; //计算每个字符所对应的条形图中柱形的宽度
		int indiv = (int)(((width-40)/24)*0.6);//设置间隔
		int maxCount = 0;  //得到最多的字符
		
		for(int i=0;i

实现的效果如下:

简单的java文档扫描器_第1张图片

       


你可能感兴趣的:(JAVA)