Package

Source Code of Principal

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

public class Principal {

  private static List<String> wordList;
  private static Random randomGenerator;
  private static String version = "15-05-2012";

  private String word;

  private JFrame frm;
  private JButton btnOrigText;
  private JLabel lblOriginalText;
  private JButton btnStart;
  private JButton btnNext;
  private JFormattedTextField txtUser;

  static {
    randomGenerator = new Random();
    wordList = new ArrayList<String>();
    BufferedReader wlf;
    try {

      if (new File("WordList.txt").exists()) {
        wlf = new BufferedReader(new FileReader("WordList.txt"));
      } else {
        InputStreamReader in = new InputStreamReader(PlayChar.class
            .getResourceAsStream("WordList.txt"));
        wlf = new BufferedReader(in);
      }

      String strLine;
      while ((strLine = wlf.readLine()) != null) {
        strLine = strLine.trim();
        if (!strLine.startsWith("#") && strLine.length() > 0){       
          wordList.add(strLine);
        }
      }
      wlf.close();

    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  public Principal() {
    frm = new JFrame("Word spelling");

    JPanel panel = new JPanel(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

    JLabel label = new JLabel("Write the spelled word:  ");
    c.insets = new Insets(30, 0, 0, 0); // padding
    c.gridx = 0;
    c.gridy = 1;
    panel.add(label, c);

    txtUser = new JFormattedTextField();
    txtUser.setColumns(20);
    txtUser.setEnabled(false);
    c.gridx = 1;
    c.gridy = 1;
    panel.add(txtUser, c);

    btnOrigText = new JButton();
    btnOrigText.setText("Show original word");
    btnOrigText.setMnemonic('h');
    btnOrigText.setEnabled(false);
    btnOrigText.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent e) {
        if (!lblOriginalText.isVisible()) {
          lblOriginalText.setText(word);
          lblOriginalText.setVisible(true);
          btnOrigText.setText("Hide original word");
        } else {
          lblOriginalText.setText("");
          lblOriginalText.setVisible(false);
          btnOrigText.setText("Show original word");
        }

        txtUser.requestFocus();
        lblOriginalText.repaint();
        btnOrigText.repaint();

      }
    });
    c.insets = new Insets(10, 0, 0, 0); // padding
    c.gridx = 0;
    c.gridy = 2;
    panel.add(btnOrigText, c);

    lblOriginalText = new JLabel(" ");
    c.gridx = 1;
    c.gridy = 2;
    lblOriginalText.setVisible(false);
    panel.add(lblOriginalText, c);

    btnStart = new JButton();
    btnStart.setText("Start");
    btnStart.setMnemonic('r');
   
    btnStart.registerKeyboardAction(btnStart.getActionForKeyStroke(
                 KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, false)),
                 KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false),
                 JComponent.WHEN_FOCUSED);

    btnStart.registerKeyboardAction(btnStart.getActionForKeyStroke(
                 KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, true)),
                 KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, true),
                 JComponent.WHEN_FOCUSED);

   
    btnStart.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
        btnStart.setText("Repeat");
        btnStart.setEnabled(false);
        btnNext.setEnabled(false);
        btnOrigText.setEnabled(true);
       
        if (!txtUser.isEnabled()){
          txtUser.setEnabled(true);
        }
        txtUser.requestFocus();
       
        btnStart.repaint();
        btnNext.repaint();

        new Thread(new Runnable() {
          public void run() {
            playWord(false);
          }
        }).start();

      }
    });
    c.anchor = GridBagConstraints.LAST_LINE_END;
    c.gridx = 0;
    c.gridy = 3;
    c.insets = new Insets(40, 0, 0, 0); // padding
    panel.add(btnStart, c);

    btnNext = new JButton();
    btnNext.setText("Next");
    btnNext.setEnabled(false);
    btnNext.setMnemonic('N');
    btnNext.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent arg0) {
        btnStart.setEnabled(false);
        btnNext.setEnabled(false);

        lblOriginalText.setText("");
        lblOriginalText.setVisible(false);
        btnOrigText.setText("Show original word");

        txtUser.setText("");
        txtUser.repaint();
        txtUser.requestFocus();
       
        btnStart.repaint();
        btnNext.repaint();

        lblOriginalText.repaint();
        btnOrigText.repaint();

        new Thread(new Runnable() {
          public void run() {
            playWord(true);
          }
        }).start();

      }
    });
    c.anchor = GridBagConstraints.LAST_LINE_START;
    c.gridx = 1;
    c.gridy = 3;
    c.insets = new Insets(40, 10, 0, 0); // padding
    panel.add(btnNext, c);

    frm.getContentPane().add(panel, BorderLayout.CENTER);

    final JLabel about = new JLabel();
    about.setText("About ");
    // about.setHorizontalTextPosition(JLabel.RIGHT);
    about.setHorizontalAlignment(JLabel.RIGHT);

    about.addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent arg0) {
        JOptionPane
            .showMessageDialog(about,
                "Version "+version
                +"\nLicensed under GPL, sounds under CC sampling.\n"+
                "Any questions, visit \nhttp://engspell.sourceforge.net/",
                "About", JOptionPane.PLAIN_MESSAGE);
      }

    });

    frm.getContentPane().add(about, BorderLayout.NORTH);

    frm.pack();

    frm.setSize(500, 300);
    frm.setLocation(100, 200);
    frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frm.setVisible(true);
   
   

  }

  private void playWord(boolean newWord) {
    PlayChar clipPlayer = null;

    try {
      if (newWord || word == null) {
        int randomInt = randomGenerator.nextInt(100);
        word = wordList.get(randomInt % wordList.size());
        System.out.println("Word selected: " + word);
      }

      for (char c : word.toCharArray()) {

        if (Character.isLetter(c) || Character.isDigit(c)) {
          String filename = "";
         
          if (Character.isLetter(c) ){
            filename = "sounds/" + Character.toUpperCase(c)
                + ".wav";
          } else {         
            filename = "sounds/" +c + ".wav";
          }

          InputStream inputStream = Principal.class.getClassLoader()
              .getResourceAsStream(filename);
          BufferedInputStream bis = new BufferedInputStream(
              inputStream);
          clipPlayer = new PlayChar(bis);

          clipPlayer.play();
        }
        Thread.sleep(600);
      }

      btnStart.setEnabled(true);
      btnNext.setEnabled(true);

      btnStart.repaint();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }


  public static void main(String[] args) {
    try {
  /*    System.setOut(new PrintStream(new BufferedOutputStream(
          new FileOutputStream("stdout.txt"))));
     
      System.setErr(new PrintStream(new BufferedOutputStream(
          new FileOutputStream("stderr.txt"))));
*/
      new Principal();
    } catch (Exception e) {
      e.printStackTrace();
    }

  }

}
TOP

Related Classes of Principal

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.