public void actionPerformed(ActionEvent e) { if (e.getSource() == btnPractice) { if (NewWord.size() == 0) { JOptionPane.showMessageDialog(null, "单词本现在无生词,请加入生词后再做练习"); } else { dictionary.setVisible(false); PracticeFrame practiceFrame = new PracticeFrame(1); practiceFrame.setLocationRelativeTo(NewWordNotePane.this); btnSpellWord.setEnabled(false); btnPractice.setEnabled(false); } } else if (e.getSource() == btnSpellWord) { if (NewWord.size() == 0) { JOptionPane.showMessageDialog(null, "单词本现在无生词,请加入生词后再做练习"); } else { dictionary.setVisible(false); PracticeFrame practiceFrame = new PracticeFrame(2); practiceFrame.setLocationRelativeTo(NewWordNotePane.this); btnSpellWord.setEnabled(false); btnPractice.setEnabled(false); } } else if (e.getSource() == deleteWord) { DeleteNewWord(); } }
// TODO 复制文件 //用于判断拼写正确与否的函数 private void ChargeSpell() { String word = WordTextFile.getText(); if (word.equals(NewWord.get(index))) { RightAnswer.setText("恭喜回答正确"); ChangeCard("p2"); } else { RightAnswer.setText("可惜了回答错误,继续努力。正确答案为" + NewWord.get(index)); ChangeCard("p2"); } }
// TODO 用于删除生词的函数 private void DeleteWord(int x) { String word = ""; if (x == 1) { if (type == 0) { NewWord.remove(Subject.getText()); word = Subject.getText(); } else { word = NewWord.get(index); NewWord.remove(NewWord.get(index)); } } else if (x == 2) { word = NewWord.get(index); NewWord.remove(NewWord.get(index)); } AddWordToList(); mark = new boolean[NewWord.size()]; // 初始化标记数组 for (int i = 0; i < mark.length; i++) { mark[i] = false; } try { FileReader fr = new FileReader("NewWord.txt"); // 输入流对象 BufferedReader in = new BufferedReader(fr); String line = in.readLine(); // 读入一行数据 String text = ""; while (line != null) { text = text + line + "\n"; // 将数据附加到字符串变量text后 line = in.readLine(); // 读入一行新数据 } in.close(); // 关闭输入流对象 fr.close(); text = text.replace(word + "@", ""); File file = new File("NewWord.txt"); file.delete(); File file1 = new File("NewWord.txt"); FileWriter fw = new FileWriter("NewWord.txt"); // 创建输出流对象 BufferedWriter out = new BufferedWriter(fw); out.write(text); // 将文本区内容写到指定文件中 out.flush(); // 关闭输出流 fw.close(); } catch (Exception e1) { e1.getStackTrace(); } finally { NewSpeakWord(); if (x == 1) { NewPractice(); } else if (x == 2) { NextSpellQuestion(); } } }
// TODO 复制文件 //用于生成下一个spell题目的函数 private void NextSpellQuestion() { ChangeCard("p3"); boolean flag = false; for (int i = 0; i < NewWord.size(); i++) { if (!mark[i]) flag = true; } if (!flag) { for (int i = 0; i < NewWord.size(); i++) { mark[i] = false; } } Random random = new Random(); while (true) { index = random.nextInt(NewWord.size()); if (!mark[index]) { mark[index] = true; break; } } Questionmean.setText(wordLib.getMean(dictionary.Tree.getWordIndex(NewWord.get(index)))); WordTextFile.setText(""); WordTextFile.requestFocus(); }
// TODO 用于判断题目答案是否正确的函数 private void Charge(int i) { if (type == 0) { if (Answer[i] .getText() .equals(wordLib.getMean(dictionary.Tree.getWordIndex(NewWord.get(index))))) { RightAnswer.setText("恭喜回答正确"); ChangeCard("p2"); } else { RightAnswer.setText( "可惜了回答错误,继续努力。正确答案为" + wordLib.getMean(dictionary.Tree.getWordIndex(NewWord.get(index)))); ChangeCard("p2"); } } else { if (Answer[i].getText().equals(NewWord.get(index))) { RightAnswer.setText("恭喜回答正确"); ChangeCard("p2"); } else { RightAnswer.setText("可惜了回答错误,继续努力。正确答案为" + NewWord.get(index)); ChangeCard("p2"); } } }
// TODO 复制文件 //用于产生下一个题目的函数 private void NewPractice() { ChangeCard("p1"); boolean flag = false; for (int i = 0; i < NewWord.size(); i++) { if (!mark[i]) flag = true; } if (!flag) { for (int i = 0; i < NewWord.size(); i++) { mark[i] = false; } } Random random = new Random(); while (true) { index = random.nextInt(NewWord.size()); if (!mark[index]) { mark[index] = true; break; } } type = random.nextInt(2); if (type == 0) { Subject.setText(NewWord.get(index)); boolean[] num = new boolean[4]; for (int i = 0; i < 4; i++) { num[i] = false; } int index1 = random.nextInt(4); Answer[index1].setText(wordLib.getMean(dictionary.Tree.getWordIndex(NewWord.get(index)))); num[index1] = true; for (int i = 0; i < 3; i++) { while (true) { index2 = random.nextInt(4); if (!num[index2]) break; } if (NewWord.size() < 10) { Answer[index2].setText( wordLib.getMean( dictionary.Tree.getWordIndex(wordLib.getWord(random.nextInt(15000))))); } else { Answer[index2].setText( wordLib.getMean( dictionary.Tree.getWordIndex(wordLib.getWord(random.nextInt(NewWord.size()))))); } num[index2] = true; } } else { Subject.setText(wordLib.getMean(dictionary.Tree.getWordIndex(NewWord.get(index)))); boolean[] num = new boolean[4]; for (int i = 0; i < 4; i++) { num[i] = false; } index1 = random.nextInt(4); Answer[index1].setText(NewWord.get(index)); num[index1] = true; for (int i = 0; i < 3; i++) { int index2 = 0; while (true) { index2 = random.nextInt(4); if (!num[index2]) break; } if (NewWord.size() < 10) { Answer[index2].setText(wordLib.getWord(random.nextInt(15000))); } else { Answer[index2].setText(NewWord.get(random.nextInt(NewWord.size()))); } num[index2] = true; } } }
// TODO 复制文件 //显示问题的窗体 private class PracticeFrame extends JFrame { // 用于布局的SWING组件第一个CARD中的 private JButton delete = new JButton("删除"); private JButton next = new JButton("下一个"); private JLabel Subject = new JLabel(); // 显示题目的一个label private ButtonGroup buttongroup = new ButtonGroup(); // 用于存放选项的一个BOX private JRadioButton[] Answer = new JRadioButton[4]; // 4个答案 private JPanel SubjectPane = new JPanel(new BorderLayout()); // 用于布局的Pane private JPanel AnswerPane = new JPanel(new GridLayout(4, 1, 10, 10)); private JPanel ButtonPane = new JPanel(new GridLayout(0, 2, 10, 10)); private JPanel p1 = new JPanel(); private JPanel p2 = new JPanel(); private JPanel p3 = new JPanel(); // 两个CARD中的组件 private JTextArea RightAnswer = new JTextArea("", 20, 20); // 记入显示信息的 private JScrollPane RightAnswerpane = new JScrollPane(RightAnswer); private JButton NextQuestion = new JButton("下一题"); private boolean[] mark = new boolean[NewWord.size()]; private ActionHandler actionHandler = new ActionHandler(); private CardLayout card = new CardLayout(); private JPanel pane = new JPanel(); // cardP3中的组件 private JTextArea Questionmean = new JTextArea("sdsfddfsdf", 10, 10); private JButton Sure = new JButton("确认"); private JLabel Spell = new JLabel(" 拼读:"); private JTextField WordTextFile = new JTextField("", 10); private JButton Speak = new JButton("语言识别"); private int x; // 用于保存产生的随机数的标量 int index = 0; int index1 = 0; int index2 = 0; int type = 0; /** * 构造函数,构造一个题目窗体,要以int型的参数用于确定题目类型。参数为1时代表生词选择题,参数为2时用于 生词拼写题 * * @param x 题目类型 */ // 构造函数 public PracticeFrame(final int x) { super(); this.x = x; this.setVisible(true); this.setBounds(200, 200, 400, 300); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent arg0) { btnPractice.setEnabled(true); btnSpellWord.setEnabled(true); } }); delete.addActionListener(new DeleteAction()); delete.addKeyListener(new keyEventHandler()); next.addKeyListener(new keyEventHandler()); next.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { if (x == 1) { NewPractice(); } else if (x == 2) { NextSpellQuestion(); } } }); ButtonPane.add(delete); ButtonPane.add(next); SubjectPane.add(Subject, BorderLayout.CENTER); SubjectPane.add(new JLabel(), BorderLayout.EAST); // 初始化4个答案 for (int i = 0; i < 4; i++) { Answer[i] = new JRadioButton("" + i); buttongroup.add(Answer[i]); AnswerPane.add(Answer[i]); Answer[i].addActionListener(actionHandler); Answer[i].addKeyListener(new keyEventHandler()); } Answer[0].setMnemonic(KeyEvent.VK_1); Answer[1].setMnemonic(KeyEvent.VK_2); Answer[2].setMnemonic(KeyEvent.VK_3); Answer[3].setMnemonic(KeyEvent.VK_4); // card的布局 // 对p1的操作 pane.setLayout(card); p1.setLayout(new BorderLayout()); p1.add(SubjectPane, BorderLayout.NORTH); p1.add(AnswerPane, BorderLayout.CENTER); pane.add(p1, "p1"); // 对p2的操作 p2.setLayout(new BorderLayout()); RightAnswer.setFont(new Font("宋体", Font.BOLD, 20)); RightAnswer.setLineWrap(true); RightAnswer.setEditable(false); p2.add(RightAnswerpane, BorderLayout.CENTER); JPanel buJPanel = new JPanel(new GridLayout(0, 5)); pane.add(p2, "p2"); this.getContentPane().add(ButtonPane, BorderLayout.NORTH); this.getContentPane().add(pane, BorderLayout.CENTER); this.addKeyListener(new keyEventHandler()); // 对p3的操作 p3.setLayout(new BorderLayout()); JPanel panel = new JPanel(new GridLayout(0, 4, 10, 10)); Spell.setFont(new Font("宋体", Font.BOLD, 20)); Questionmean.setFont(new Font("宋体", Font.BOLD, 18)); Questionmean.setEditable(false); Questionmean.setLineWrap(true); panel.add(Spell); panel.add(WordTextFile); panel.add(Sure); panel.add(Speak); p3.add(Questionmean, BorderLayout.CENTER); p3.add(panel, BorderLayout.SOUTH); pane.add(p3, "p3"); Sure.addActionListener(actionHandler); WordTextFile.addKeyListener(new keyEventHandler()); Speak.addActionListener(actionHandler); Speak.addKeyListener(new keyEventHandler()); // 初始化标记数组 for (int i = 0; i < mark.length; i++) { mark[i] = false; } if (x == 1) { NewPractice(); } else if (x == 2) { NextSpellQuestion(); NewSpeakWord(); } } // TODO 用于删除生词的函数 private void DeleteWord(int x) { String word = ""; if (x == 1) { if (type == 0) { NewWord.remove(Subject.getText()); word = Subject.getText(); } else { word = NewWord.get(index); NewWord.remove(NewWord.get(index)); } } else if (x == 2) { word = NewWord.get(index); NewWord.remove(NewWord.get(index)); } AddWordToList(); mark = new boolean[NewWord.size()]; // 初始化标记数组 for (int i = 0; i < mark.length; i++) { mark[i] = false; } try { FileReader fr = new FileReader("NewWord.txt"); // 输入流对象 BufferedReader in = new BufferedReader(fr); String line = in.readLine(); // 读入一行数据 String text = ""; while (line != null) { text = text + line + "\n"; // 将数据附加到字符串变量text后 line = in.readLine(); // 读入一行新数据 } in.close(); // 关闭输入流对象 fr.close(); text = text.replace(word + "@", ""); File file = new File("NewWord.txt"); file.delete(); File file1 = new File("NewWord.txt"); FileWriter fw = new FileWriter("NewWord.txt"); // 创建输出流对象 BufferedWriter out = new BufferedWriter(fw); out.write(text); // 将文本区内容写到指定文件中 out.flush(); // 关闭输出流 fw.close(); } catch (Exception e1) { e1.getStackTrace(); } finally { NewSpeakWord(); if (x == 1) { NewPractice(); } else if (x == 2) { NextSpellQuestion(); } } } // TODO 复制文件 //用于删除新词的动作事件 private class DeleteAction implements ActionListener { public void actionPerformed(ActionEvent e) { int yesorno = 0; yesorno = JOptionPane.showConfirmDialog(PracticeFrame.this, "是否要删除本词"); if (yesorno == JOptionPane.YES_OPTION) { if (x == 1) { DeleteWord(1); } else { DeleteWord(2); } } } } // TODO 用于判断题目答案是否正确的函数 private void Charge(int i) { if (type == 0) { if (Answer[i] .getText() .equals(wordLib.getMean(dictionary.Tree.getWordIndex(NewWord.get(index))))) { RightAnswer.setText("恭喜回答正确"); ChangeCard("p2"); } else { RightAnswer.setText( "可惜了回答错误,继续努力。正确答案为" + wordLib.getMean(dictionary.Tree.getWordIndex(NewWord.get(index)))); ChangeCard("p2"); } } else { if (Answer[i].getText().equals(NewWord.get(index))) { RightAnswer.setText("恭喜回答正确"); ChangeCard("p2"); } else { RightAnswer.setText("可惜了回答错误,继续努力。正确答案为" + NewWord.get(index)); ChangeCard("p2"); } } } SoundRecognition sound = new SoundRecognition(); // TODO 动作事件用于在选择答案时跳转到第二个card private class ActionHandler implements ActionListener { public void actionPerformed(ActionEvent e) { for (int i = 0; i < 4; i++) { if (e.getSource() == Answer[i]) { // Answer[i].setSelected(false); Charge(i); } } if (e.getSource() == Sure) { ChargeSpell(); } else if (e.getSource() == Speak) { ExecutorService executorService = Executors.newFixedThreadPool(1); executorService.execute( new Runnable() { public void run() { try { Speak.setEnabled(false); WordTextFile.setText(sound.startRec()); Speak.setEnabled(true); System.out.println("done"); } catch (Exception e2) { } } }); // Dictionary.takeWordSearch.startSearch(); executorService.shutdown(); } } } private class keyEventHandler extends KeyAdapter { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_1) { Charge(0); } else if (e.getKeyCode() == KeyEvent.VK_2) { Charge(1); } else if (e.getKeyCode() == KeyEvent.VK_3) { Charge(2); } else if (e.getKeyCode() == KeyEvent.VK_4) { Charge(3); } else if (e.getKeyCode() == KeyEvent.VK_D) { if (x == 1) { int yesorno = 0; yesorno = JOptionPane.showConfirmDialog(PracticeFrame.this, "是否要删除本词"); if (yesorno == JOptionPane.YES_OPTION) DeleteWord(1); } } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { if (x == 1) { NewPractice(); } else if (x == 2) { NextSpellQuestion(); } } else if (e.getKeyCode() == KeyEvent.VK_ENTER) { ChargeSpell(); } } } // TODO 复制文件 //用于跳转card的函数 private void ChangeCard(String p) { card.show(pane, p); } // TODO 复制文件 //用于产生下一个题目的函数 private void NewPractice() { ChangeCard("p1"); boolean flag = false; for (int i = 0; i < NewWord.size(); i++) { if (!mark[i]) flag = true; } if (!flag) { for (int i = 0; i < NewWord.size(); i++) { mark[i] = false; } } Random random = new Random(); while (true) { index = random.nextInt(NewWord.size()); if (!mark[index]) { mark[index] = true; break; } } type = random.nextInt(2); if (type == 0) { Subject.setText(NewWord.get(index)); boolean[] num = new boolean[4]; for (int i = 0; i < 4; i++) { num[i] = false; } int index1 = random.nextInt(4); Answer[index1].setText(wordLib.getMean(dictionary.Tree.getWordIndex(NewWord.get(index)))); num[index1] = true; for (int i = 0; i < 3; i++) { while (true) { index2 = random.nextInt(4); if (!num[index2]) break; } if (NewWord.size() < 10) { Answer[index2].setText( wordLib.getMean( dictionary.Tree.getWordIndex(wordLib.getWord(random.nextInt(15000))))); } else { Answer[index2].setText( wordLib.getMean( dictionary.Tree.getWordIndex(wordLib.getWord(random.nextInt(NewWord.size()))))); } num[index2] = true; } } else { Subject.setText(wordLib.getMean(dictionary.Tree.getWordIndex(NewWord.get(index)))); boolean[] num = new boolean[4]; for (int i = 0; i < 4; i++) { num[i] = false; } index1 = random.nextInt(4); Answer[index1].setText(NewWord.get(index)); num[index1] = true; for (int i = 0; i < 3; i++) { int index2 = 0; while (true) { index2 = random.nextInt(4); if (!num[index2]) break; } if (NewWord.size() < 10) { Answer[index2].setText(wordLib.getWord(random.nextInt(15000))); } else { Answer[index2].setText(NewWord.get(random.nextInt(NewWord.size()))); } num[index2] = true; } } } // TODO 复制文件 //用于生成下一个spell题目的函数 private void NextSpellQuestion() { ChangeCard("p3"); boolean flag = false; for (int i = 0; i < NewWord.size(); i++) { if (!mark[i]) flag = true; } if (!flag) { for (int i = 0; i < NewWord.size(); i++) { mark[i] = false; } } Random random = new Random(); while (true) { index = random.nextInt(NewWord.size()); if (!mark[index]) { mark[index] = true; break; } } Questionmean.setText(wordLib.getMean(dictionary.Tree.getWordIndex(NewWord.get(index)))); WordTextFile.setText(""); WordTextFile.requestFocus(); } // TODO 复制文件 //用于判断拼写正确与否的函数 private void ChargeSpell() { String word = WordTextFile.getText(); if (word.equals(NewWord.get(index))) { RightAnswer.setText("恭喜回答正确"); ChangeCard("p2"); } else { RightAnswer.setText("可惜了回答错误,继续努力。正确答案为" + NewWord.get(index)); ChangeCard("p2"); } } }