一个用来记单词的swing小程序

本文介绍了一款用于英语单词记忆的Java Swing应用开发过程,着重解决了国际音标输入问题,通过图片存储与自定义HTML编辑器套件实现音标显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    构思很久,终于完成了一个用来记英文单词的swing小程序。

    程序主要由两个界面构成,一个学习与默写的界面,和一个输入界面。

 

 

 

     在写程序的过程中遇到一个问题,就是国际音标的输入。金山词霸上的国际音标用的是金山字体,这种东东我可玩不转,于是就用一个偷懒的方法,那就是从金山词霸2007上截图,图片存入数据库。java截图方法是从《swing hack》上

借鉴的,主要思路是整个屏幕,得到一张图片,写一个类继承JComponent,重写paintComponent方法把得到图片绘制该组件上,把该组件放到一个JFrame上,去掉JFrame的边框,在JFrame上监听鼠标事件,进行指定区域的屏幕截图。

      在学习与默写界面使用JEditPane显示组装的htm文本,国标音标使用一个img标记来显示,但是不能再通过url来加载图片了,因为图片是存储在数据库中的。通过研究jdk源代码和调试终于找到了让img标记从本地数据库中加载的方法。

主要的思路是写一个MyHTMLEditorKit类 继承HTMLEditorKit,在MyHTMLEditorKit 写一个内部类MyViewFactory去继承HTMEditortoolkit的内部类ViewFactory,重写ViewFactory的create方法,当解析到IMG标记时返回自定义的ImageView的子类,不再返回ImageView类。

 

MyHTMLEditorKit 的代码:

package com.myswing;

import javax.swing.text.Element;
import javax.swing.text.LabelView;
import javax.swing.text.StyleConstants;
import javax.swing.text.View;
import javax.swing.text.ViewFactory;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.InlineView;


public class MyHTMLEditorKit extends HTMLEditorKit {

 /**
  * serialVersionUID
  */
 private static final long serialVersionUID = -6075329078257754709L;

 
 

 @Override
 public ViewFactory getViewFactory() {
  
  return new MyViewFactory();
 }

 

 public class MyViewFactory extends HTMLFactory {
  
  
  
  
  
  
  /**
   * Creates a view from an element.
   *
   * @param elem
   *            the element
   * @return the view
   */
  public View create(Element elem) {
   Object o = elem.getAttributes().getAttribute(
     StyleConstants.NameAttribute);
   if (o instanceof HTML.Tag) {
    HTML.Tag kind = (HTML.Tag) o;
    if (kind == HTML.Tag.CONTENT) {
     return new InlineView(elem);
    
    } else if (kind == HTML.Tag.IMG) {
     return new MyImageView(elem);
    } else {
     return super.create(elem);     
    }
   }
   // default to text display
   return new LabelView(elem);

  }
 }

}

 


MyView类的代码:

package com.myswing;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Shape;
import java.net.URL;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.text.Element;
import javax.swing.text.View;
import javax.swing.text.html.HTML;
import javax.swing.text.html.ImageView;

import oracle.net.ano.SupervisorService;
import service.servericeimpl.BusinessServiceImpl;

import com.sun.java_cup.internal.internal_error;

public class MyImageView extends ImageView {
 public MyImageView(Element element) {
  super(element);
 }

 Image imageChache = null;

 @Override
 public Image getImage() {
  String src = (String) getElement().getAttributes().getAttribute(
    HTML.Attribute.SRC);
  if (src.startsWith("image:")) {
   System.out.println("test image");

   if (imageChache != null)
    return imageChache;
   String word = src.substring(src.indexOf(":")+1);
   URL url = this.getClass().getClassLoader().getResource("A-05.jpg");
   
   
   Image tempImage = BusinessServiceImpl.getIntance().getImage(word);
   if ( tempImage != null ) {
    this.imageChache = tempImage;
   } else {
    imageChache = null;
   }  
   
   return imageChache;
  }

  return super.getImage();
 }

 @Override
 public void setSize(float width, float height) {
  if (imageChache != null) {
   width = imageChache.getWidth(null);
   height = imageChache.getHeight(null);
   System.out.println(width + ":" + height);
  }
  super.setSize(width, height);
 }

 public void paint(Graphics g, Shape a) {
  Rectangle rect = (a instanceof Rectangle) ? (Rectangle) a : a
    .getBounds();

  Image image = getImage();
  Rectangle clip = g.getClipBounds();
  if (image != null) {
   int width = image.getWidth(null);
   int height = image.getHeight(null);
   // Draw the image
   g.drawImage(image, rect.x + 1, rect.y + 1, width,
     height, null);

  }

 }

}

 

 

 

 

Swing单词&单词忆系统    一、 [题目描述]  使用C语言设计一个单词系统,该系统是帮助学生背诵单词的软件,要求用户可以选择背诵的词库,并可以编辑自己的词库。系统可以给出中文,让学生输入其英文意思,也可输出英文让学生输入中文意思。并判定词义是否正确。如不正确给出提示并要求用户重新输入。如正确给以鼓励。还应有词语预览功能。 基本功能:         词库的维护(单词的添加、修改、删除)        课程预览(单词的展示)         显示中文用户输入英文的背诵方法        显示英文用户输入中文的背诵方法         背诵成绩的录(本程序设计运行一次程序所背诵的所有单词,答对一个得10分,打错一个扣5分)  二、 [功能模块分解及说明]  1、树形结构模块图    2、模块功能概述  程序概述:设计录入词库的结构体,结构体中分别存放英文和中文,整个程序基本上就是 关于结构体的操作,其中包括了顺序结构、循环结构、选择结构。  单词添加:用户自己输入单词以及翻译,存入结构体中。  单词修改:首先在词库中找到这个单词(如果没有则提示用户没有该单词),然后用户输 入修改后的单词及翻译。  单词删除:先在词库中找到单词,然后将这个单词之后的所有单词顺次前移,实现删除功 能。  输出词库:输出结构体存放的单词。  单词测试:用户首先选择测试模式,然后词库中输出现有单词,用户希望结束时输出 “jieshu”,并且在这两个函数中计分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值