构思很久,终于完成了一个用来记英文单词的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);
}
}
}
- 大小: 48.5 KB
- 大小: 32.5 KB
- 大小: 40 KB
分享到:
相关推荐
标题中的“英语单词记忆软件(Swing+Access)”是一个基于Java Swing和Microsoft Access数据库开发的应用程序,主要用于帮助用户高效地记忆英语单词。该软件通过创建一个友好的图形用户界面(GUI),使用户能够轻松地...
总的来说,这段代码提供了一种在Swing应用中实现气泡浮动提示窗口的方法,通过自定义组件和布局,结合颜色、字体等设计元素,以及动画效果,创建了一个具有视觉吸引力且功能完备的提示机制。开发者可以根据实际需求...
本项目是一个小型的背单词系统,采用Java语言进行开发。Java作为一种跨平台、面向对象的编程语言,以其高效、稳定和强大的类库支持,常用于开发各种类型的应用程序,包括教育软件。在这个背单词系统中,开发者利用...
它的基本思想是创建一个自定义的二进制前缀编码,使得频率较高的字符(或单词)具有较短的编码,而频率较低的字符(或单词)具有较长的编码。这样可以减少常用字符在数据中的平均位数,从而实现数据的高效压缩。 在...
在给定的代码片段中,有一个字符串数组 `s` 用来存储练习中将要显示的单词列表。这通常是通过循环遍历数组并将每个单词依次显示在界面上来实现的。 综上所述,这个简单的打字练习程序不仅涵盖了 Java Swing 的基本...
这个小项目是基于Java Swing实现的一个简单文本输入框,允许用户输入单词或句子,对于初学者或者想要熟悉Swing API的开发者来说,这是一个很好的实践案例。 在Java Swing中,用户界面组件(如按钮、文本框等)被...
【背单词系统】是一个由大学生在大一时编程创作的小型应用程序,主要目的是帮助用户学习和记忆英语单词。这个系统的设计和实现充分展示了编程基础、数据管理以及用户交互方面的知识。 在编程基础方面,该系统可能...
1. **字典库**:拼写检查的基础是有一个可靠的词典库,它包含了所有正确的单词。在Java中,我们可以创建一个哈希表或使用Trie数据结构来存储词典,以便快速查找单词。这样,当用户输入的单词与字典中的单词进行比较...
2. **随机数生成**:Java的`java.util.Random`类可以用来生成随机整数,用于在单词列表中选取一个单词。 3. **文件I/O**:读取单词列表文件需要使用Java的文件I/O流,如`java.io.BufferedReader`,从文本文件中读取...
本代码示例展示了一个基本的英汉词典添加功能的 Java 应用程序,涉及了 Java Swing 用户界面设计、事件处理机制、MySQL 数据库交互、异常处理等多个方面的知识。通过这个示例,不仅可以了解到如何构建简单的桌面应用...
Swing是Java的一个图形用户界面工具包,用于创建桌面应用程序。 #### 抽象窗口工具包 (AWT: Abstract Window Toolkit) AWT是Java早期提供的GUI组件库,用于创建跨平台的图形用户界面。 #### 窗体 (Frame) Frame是...
Java提供了一个强大的异常处理机制,包括`try`、`catch`、`finally`等关键字,用于捕获和处理异常。 #### F. Float (浮点型) 浮点型是Java中表示实数的一种数据类型。它可以精确地表示小数部分,但精度有限制。 #...
在这个项目中,开发者创建了一个互动的游戏,玩家需要通过键盘输入字母来完成指定的单词,从而提升打字速度和准确性。 首先,让我们深入了解一下Java Swing。Swing是Java Foundation Classes (JFC)的一部分,用于...
【标题】:“一个界面滑动的滚动条信息程序” 在计算机用户界面设计中,滚动条是一种常见的元素,它允许用户查看超过屏幕显示范围的内容。在本项目“一个界面滑动的滚动条信息程序”中,重点是实现了一个具有动态...
《Java实现的简易英汉词典》是一款...总之,这个Java实现的英汉词典项目涵盖了多方面的Java技术,是学习和理解Java应用程序开发的一个综合性案例。无论是对初学者还是有经验的开发者,都能从中获得有价值的启示和经验。
这篇文档是2017年人教版八年级上册英语单词表的一部分,包含了多个单元的词汇和短语。这些词汇是学生在学习英语时需要掌握的基础知识,对于提高阅读、写作和口语能力至关重要。 首先,Unit1的主题是“Where did you...
9. **everyone** - 每人,人人,指群体中的每一个人。 10. **yourself** - 你自己,你亲自,反身代词,表示对方自己做某事。 11. **hen** - 母鸡,雌禽,农场动物的一种。 12. **boring** - 无聊的,形容使人感到...
在本项目中,我们使用Java编程语言,通过递归的方式实现了一个具有图形用户界面(GUI)的回文判断程序。下面将详细介绍这个项目中的关键知识点。 1. **Java基础**:首先,我们需要了解Java的基本语法,包括变量声明...