Electron Dictionary电子词典程序

界面设计使用选项卡的设计方式,有查单词和生词本这两个示例功能选项。查单词功能选项页面可以输入单词查询,并返回查到的结果,还可以选择将查询结果添加到生词本。生词本功能选项页面,能将添加过的生词以表格的形式展示出来,添加单词到生词本后生词本中的数据能自动同步刷新。

·增加新功能只需要添加item就可以了方便扩展

Main启动类

public class Main {

public static void main(String[] args) {

Window window = new Window("词典小程序");

}

}

UI窗口类

import javax.swing.*;

import javax.swing.table.DefaultTableModel;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

public class Window extends JFrame implements ActionListener {

public OperationWordList op = new OperationWordList();

private JTabbedPane tabs = new JTabbedPane(JTabbedPane.LEFT,JTabbedPane.SCROLL_TAB_LAYOUT);

private ImageIcon imageIconTr = new ImageIcon(System.getProperty("user.dir")+"\\src\\love\\icon\\translate.png");

private ImageIcon imageIconWL = new ImageIcon(System.getProperty("user.dir")+"\\src\\love\\icon\\wordList.png");

//第一个item中控件

private JTextField txtInput = new JTextField();

private JTextField txtResult = new JTextField();

private JLabel lblInfo = new JLabel( "Translation Demo", JLabel.CENTER );

private JLabel lblinput = new JLabel( "翻译内容:", JLabel.LEFT );

private JLabel lblresult = new JLabel( "结果", JLabel.LEFT );

private JButton btnTrans = new JButton( "翻译" );

private JButton btnAddBook = new JButton( "加入生词本" );

private JPanel panel1 = new JPanel(new GridLayout(3,0));

private JPanel panel2 = new JPanel(new BorderLayout());

private void setPanel1(){

//提示panel

JPanel lblPanel = new JPanel(new GridLayout( 2, 1 ,10,10));

lblPanel.add(lblinput);

lblPanel.add(lblresult);

//输入输入panel

JPanel txtPanel = new JPanel( new GridLayout( 2, 1,10,10 ) );

txtPanel.add(new JScrollPane(txtInput)); //加入滚动条

txtPanel.add(new JScrollPane(txtResult));

//将提示panle和输入输出panel加入布局

JPanel panelLT = new JPanel(new BorderLayout());

panelLT.add( lblPanel, BorderLayout.WEST );

panelLT.add( txtPanel, BorderLayout.CENTER );

JPanel panelBtn = new JPanel();

panelBtn.add(btnTrans);

panelBtn.add(btnAddBook);

btnTrans.addActionListener(this); //注册监听

btnTrans.setActionCommand("Translate"); //添加按钮识别码

btnAddBook.addActionListener(this);

btnAddBook.setActionCommand("AddBook");

panel1.add(lblInfo);

panel1.add(panelLT);

panel1.add(panelBtn);

}

// 默认表格模型

private DefaultTableModel model = null;

private JTable table = null;

private void setPanel2(){

String[][] datas = {};

String[] titles = { "English", "翻译" };

model = new DefaultTableModel(datas, titles);

table = new JTable(model);

panel2.add(new JScrollPane(table));

refreshMyWord();

}

//刷新我的生词表

private void refreshMyWord(){

model.setRowCount(0);

String key;

String value;

for (int i=0;i

key = op.myWords.get(i);

value = op.wordMap.get(op.myWords.get(i));

model.addRow(new String[] { key, value });

}

}

public Window(String title) {

super(title);

MyTabPanel myTabPanel = new MyTabPanel();

tabs.setUI(myTabPanel); //使用自定义的选项卡UI

imageIconTr.setImage(imageIconTr.getImage().getScaledInstance(25, 25,Image.SCALE_DEFAULT));

imageIconWL.setImage(imageIconWL.getImage().getScaledInstance(25, 25,Image.SCALE_DEFAULT));

setPanel1();

setPanel2();

tabs.addTab("找单词", imageIconTr, panel1);//

tabs.addTab("生词本", imageIconWL, panel2);//

Container contentPane = getContentPane();

contentPane.add(tabs);

setSize(600,450);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setVisible(true);

}

public void actionPerformed(ActionEvent e) {

//判断按钮click

if (e.getActionCommand().equals("Translate")) {

if(txtInput.getText().equals(""))

txtResult.setText("请输入内容");

else

txtResult.setText(op.getTranslate(txtInput.getText()));

}

if (e.getActionCommand().equals("AddBook")) {

if (op.isInMyWord(txtInput.getText()))

JOptionPane.showMessageDialog(this,"您已经添加过该单词!");

else if(txtInput.getText().equals(""))

txtResult.setText("请输入内容");

else if (op.isGetWord)

{

if(op.addWordToList(txtInput.getText()))

{

JOptionPane.showMessageDialog(this,"添加成功!");

op.getMyWordList();

refreshMyWord();

}

}

else

JOptionPane.showMessageDialog(this,"遇到问题!写入失败!");

}

}

}

OperationWordList文件操作类

import java.io.*;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

public class OperationWordList {

public Map wordMap = new HashMap();

ArrayList myWords = new ArrayList();

public boolean isGetWord=false; //是否查到单词

public OperationWordList(){

readWordList();

getMyWordList();

}

//读取单词表数据添加到HashMap

public void readWordList() {

/* 向wordMap内添加英语翻译 */

try {

//替换单词表文件路径

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File

(System.getProperty("user.dir")+"\\src\\love\\data\\wordList.txt")), "UTF-8"));

String lineTxt = null;

while ((lineTxt = br.readLine()) != null) {

String[] words = lineTxt.split(" ");

wordMap.put(words[0], words[1]);

}

} catch (Exception e) {

System.err.println("read errors :" + e);

}

}

//获取我的生词表

public void getMyWordList(){

/* 向wordMap内添加英语翻译 */

try {

//替换单词表文件路径

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File

(System.getProperty("user.dir")+"\\src\\love\\data\\myWordList.txt")), "UTF-8"));

String lineTxt = null;

myWords.clear();

while ((lineTxt = br.readLine()) != null) {

myWords.add(lineTxt);

}

} catch (Exception e) {

System.err.println("read errors :" + e);

}

}

//翻译

public String getTranslate(String str){

if (wordMap.containsKey(str)){

isGetWord = true;

return wordMap.get(str);

}

else{

isGetWord = false;

return "!单词表中未找到该单词!";

}

}

//判断单词是否已经加入我的生词表

public boolean isInMyWord(String str1){

if (myWords.contains(str1))

return true;

else

return false;

}

//添加生词并返回写入 成功/失败

public boolean addWordToList(String str1){

FileWriter fw = null;

try {

File f=new File(System.getProperty("user.dir")+"\\src\\love\\data\\myWordList.txt");

fw = new FileWriter(f, true);

} catch (IOException e) {

e.printStackTrace();

return false;

}

PrintWriter pw = new PrintWriter(fw);

pw.println(str1);

pw.flush();

try {

fw.flush();

pw.close();

fw.close();

} catch (IOException e) {

e.printStackTrace();

return false;

}

return true;

}

}

MyTabPanel 自定义选项卡UI类

import javax.swing.plaf.basic.BasicTabbedPaneUI;

import java.awt.*;

public class MyTabPanel extends BasicTabbedPaneUI {

//自定义选项卡宽度和高度

protected int calculateTabWidth(int tabPlacement, int tabIndex, FontMetrics metrics) {

return super.calculateTabWidth(tabPlacement, tabIndex, metrics)+50;

}

protected int calculateTabHeight(int tabPlacement, int tabIndex, int fontHeight)

{

return super.calculateTabHeight(tabPlacement, tabIndex, fontHeight)+20;

}

//标签颜色

protected void paintTabBackground(Graphics g, int tabPlacement, int tabIndex,

int x, int y, int w, int h, boolean isSelected) {

Color defaultColor = new Color(193, 210, 240);

Color selectedColor = new Color(102,204,255);

//设置选中时和未被选中时的颜色

g.setColor(!isSelected ? defaultColor : selectedColor);

//填充图形,即选项卡为矩形

g.fillRect(x + 5, y + 5, w, h);

}

}

单词表数据如下,单词和翻译中间3个空格

abandon v.抛弃,放弃

abandonment n.放弃

abbreviation n.缩写

abeyance n.缓办,中止

abide v.遵守

ability n.能力

able adj.有能力的,能干的

abnormal adj.反常的,变态的

aboard adv.船(车)上

abolish v.废除,取消

abolition n.废除,取消

abortion n.流产

abortive adj.无效果的,失败的

about prep.关于,大约

above prep.在...之上,高于

above-mentioned adj.上述的

abreast adv.并肩,并列

abridge v.省略,摘要

生词本文件只存英语数据

文件目录如下

里面icon图标和data单词表文件换一下就可以了

^_^

电子词典java_Java电子词典程序Electron Dictionary相关推荐

  1. 英汉词典c语言报告程序,C语言电子英汉词典程序设计报告-自动化1203-李煜明.docx...

    课 程 设 计 报 告 课程名称 C语言课程设计 课题名称 电子英汉词典 专 业 自动化 班 级 1203 学 号 201201020304 姓 名 李煜明 指导教师 欧阳湘江 田媛 张晓清 2013 ...

  2. 电子学习用品商城小程序开发功能需求分析

    全民教育素质随着国人生活水平的提升得到大幅提高,传统的学习用品已经很难满足时代发展和社会进步的要求,现在孩子学习更注重学习用品的高效性.便捷性,对学习用品要求的强大拉力在很大程度上促进了电子学习用品的 ...

  3. 最近非常火的电子木鱼流量主小程序源码

    最近非常火的电子木鱼流量主小程序,希望大家也能凑个热度吧. 我看了一下那些人上线的就是手动敲木鱼,然后通过看激励视频自动敲,那么这个源码也是和他们所使用的一样 敲木鱼,功德木鱼通过模拟真实木鱼来精心养 ...

  4. 最新亲测电子木鱼流量主小程序源码/最近很火

    正文: 最近非常火的电子木鱼流量主小程序,希望大家也能凑个热度吧. 我看了一下那些人上线的就是手动敲木鱼,然后通过看激励视频自动敲,那么这个源码也是和他们所使用的一样,敲木鱼,功德木鱼通过模拟真实木鱼 ...

  5. 基于STM32的简易电子秒表仿真设计(仿真+程序+设计报告+讲解)

    基于STM32的简易电子秒表仿真设计(仿真+程序+设计报告+讲解) 视频演示 1.主要功能 2.仿真 3. 程序 4. 设计报告 5.资料清单&下载链接 仿真图proteus 8.9 程序编译 ...

  6. java相册_java 这是一个漂亮的电子音乐相册JAVA小程序 联合开发网 - pudn.com

    java 所属分类:Java编程 开发工具:Java 文件大小:14337KB 下载次数:4 上传日期:2016-12-01 17:29:09 上 传 者:关关 说明:  这是一个漂亮的电子音乐相册J ...

  7. python课堂实例,Python电子教案2 1 Python程序实例解析课堂

    <Python电子教案2 1 Python程序实例解析课堂>由会员分享,可在线阅读,更多相关<Python电子教案2 1 Python程序实例解析课堂(41页珍藏版)>请在人人 ...

  8. 【C语言】《词典翻译》小程序

    [C语言]<词典翻译>小程序 这是一款简单的"词典翻译"小程序,根据本地词库,简单实现,没有套壳,对于文件读写操作以及指针的精确掌握有着一定的帮助,希望读者能有所收获! ...

  9. jieba 词典 词频_在Hanlp词典和jieba词典中手动添加未登录词

    在使用Hanlp词典或者jieba词典进行分词的时候,会出现分词不准的情况,原因是内置词典中并没有收录当前这个词,也就是我们所说的未登录词,只要把这个词加入到内置词典中就可以解决类似问题,如何操作呢, ...

最新文章

  1. 提高班第五周周记(国庆第二天)
  2. 齐鲁师范学院计算机专业在那个校区,齐鲁师范学院有几个校区及校区地址 哪个校区最好...
  3. 返回,返回无,根本没有返回?
  4. Update语句:使用case when按条件批量更新
  5. 嵌入式新人发展的总体方向
  6. 0320-学习进度条
  7. 灵魂拷问:你和大佬,技术差距有多大?
  8. java 观察者模式示例_观察者设计模式示例
  9. matlab 迭代时保存每次迭代数据,Matlab 迭代步数据保存问题.
  10. 東方 project 联机版开发日记(1)
  11. python监听键盘输入 linux_Linux下使用Python捕获键盘输入
  12. [转载]Qt之模型/视图(自定义风格)
  13. unity2021游戏引擎安装激活并汉化
  14. diabetes影响因子2017_科学网—【关注】2017年JCR(2016)影响因子涨跌一览,Plos One跌破3分 - 美捷登的博文...
  15. 避免踩坑--网传二进制数值和点分十进制ip之间的转换
  16. 二进制与格雷码相互转换
  17. 通用无线公共接口cpri学习笔记_11/24
  18. 关于ios app名称注册的问题(抢注)
  19. 字节跳动CEO梁汝波接棒张一鸣一年:使命是我们前进的动力
  20. [PPPOE]PPPD分析

热门文章

  1. Kali Linux渗透测试之提权(二)——WCE、Fgdump、Mimikatz
  2. SKU和SPU-畅购学习day03
  3. 华为OD机试用Python实现 -【光伏场地建设规划】(2023-Q1 新题)
  4. Java程序员转大数据的学习路线(完整版)
  5. Linux驱动开发|块设备驱动
  6. linux pandas教程_Pandas快速入门
  7. 反垃圾邮件产品等级划分
  8. 95%置信区间的含义_在一定的置信度下(如95%)请解释置信区间的含义
  9. xiugai.dizhi.py
  10. PostgreSQL 8.2和8.3之间的TO_DATE函数