⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textpad.java

📁 Creating a Voice Synthesizer Application
💻 JAVA
字号:
/*
Import required awt classes
*/
import java.awt.BorderLayout;
import java.awt.GridLayout;
/*
Import required awt event classes
*/
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
/*
Import required swing classes
*/
import javax.swing.JOptionPane;
import javax.swing.event.*;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JFileChooser;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
/*
Import required io classes
*/
import java.io.File;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.FileWriter;
/*
Class: TextPad-Creates the user interface for the textpad
	Methods:
		actionPerformed():Defines the actions to be performed , when user clicks any button or menu item.
		open():Opens the file selected by the end user in the textarea of the textpad.
		setvoice():Sets the voice of the synthesizer that speaks the text to the selectyed voice.
		main():Creates the main window of the application.
*/
public class TextPad extends JFrame implements ActionListener,Runnable,KeyListener
{
	/*
	Declare variables to create the menu
	*/
	JMenuBar menubar;
    JMenu fileMenu;
	JMenu voiceMenu;
	JMenuItem open,newFile, save,exit,selVoice,speak,pause,stop,resume;
	/*
	Declare variables
	*/
	JButton speakText,stopText;
	JPanel buttonPanel, textPanel;
	JScrollPane scrollpane;
	JFileChooser filechooser;
	JTextArea textarea;
	File file;
	String str;
	String selectedVoice;
	FileInputStream fin;
	Thread t;
	String speakstring;
	/*
	Create an object of SelectVoice class
	*/
	SelectVoice sv=null;
	/*
	Create an object of SpeakText class
	*/
	SpeakText st=null;
	/*
	TextPad():Defines the default constructor for the TextPad application.
	Parameters:NA
	Return Value:NA
	*/
	public TextPad()
	{
		setTitle("Voice Synthesizer Application");
		/*
		Set the look and feel for the textpad.
		*/
		try
		{
		UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
		}
		catch(Exception e)
		{
			System.out.println("Unknown Look and Feel." + e);	
		}
       /*Set the size of user interface*/
		setSize(400,400);
		/* Set the resizable property of Jframe to false*/
		setResizable(false);
		/*
		Initialize the JPanels for the application
		*/
		sv=new SelectVoice(this);
		/*
		Initialize the JPanels
		*/
		buttonPanel=new JPanel();
		textPanel=new JPanel();
		/*
		Set the Layout for JPanels
		*/
		buttonPanel.setLayout(new GridLayout(1,2));
		textPanel.setLayout(new BorderLayout());
		/*
		Initialize and set the JMenuBar
		*/
		menubar = new JMenuBar();
		setJMenuBar(menubar);
		/*
		Initialize and create File and Voice menu
		*/
		fileMenu = new JMenu("File");
	    voiceMenu = new JMenu("Voice");
		/*
		Add menus to JMenuBar
		*/
		menubar.add(fileMenu);
		menubar.add(voiceMenu);
		/*
		Initialize new JMenuItems
		*/
		newFile=new JMenuItem("New      (Alt+F+N)");
		open = new JMenuItem("Open    (Alt+F+O)");
       	save=new JMenuItem("Save     (Alt+F+S)");
		exit=new JMenuItem("Exit       (Alt+F+E)");
		selVoice=new JMenuItem("Select Voice     (Alt+V+I)");
		speak=new JMenuItem("Speak              (Alt+V+P)");
		stop=new JMenuItem("Stop                (Alt+V+T)");
		pause=new JMenuItem("Pause              (Alt+V+A)");
		resume=new JMenuItem("Resume           (Alt+V+R)");
		/*
		Set Mnemonics for the JMenuItems
		*/
		fileMenu.setMnemonic('F');
		voiceMenu.setMnemonic('V');
		open.setMnemonic('O');
		save.setMnemonic('S');
		exit.setMnemonic('E');
		selVoice.setMnemonic('I');
		speak.setMnemonic('P');
		stop.setMnemonic('T');
		pause.setMnemonic('A');
		resume.setMnemonic('R');
		newFile.setMnemonic('N');
		/*
		Add menuitems to the file menu
		*/
		fileMenu.add(newFile);
		fileMenu.add(open);
		fileMenu.add(save);	
		fileMenu.addSeparator();
		fileMenu.add(exit);
		/*
		Add menuitems to the voice menu
		*/
		voiceMenu.add(selVoice);
		voiceMenu.add(speak);
		voiceMenu.addSeparator();
		voiceMenu.add(stop);
		voiceMenu.add(pause);
		voiceMenu.add(resume);
		/*
		Add action listener to the menu items
		*/
		newFile.addActionListener(this);
		open.addActionListener(this);
		save.addActionListener(this);
		exit.addActionListener(this);
		selVoice.addActionListener(this);
		speak.addActionListener(this);
		stop.addActionListener(this);
		pause.addActionListener(this);
		resume.addActionListener(this);
		save.setEnabled(false);
		/*
		Initialize new JButtons
		*/
		speakText=new JButton("Speak");
		stopText=new JButton("Stop");
		/*
		Set the enables property of JButton and menu items to false
		*/
		stopText.setEnabled(false);
		stop.setEnabled(false);
		pause.setEnabled(false);
		resume.setEnabled(false);
		/*
		Add action listener to JButtons
		*/
		speakText.addActionListener(this);
		stopText.addActionListener(this);
		/*
		Add buttons to button panel
		*/
		buttonPanel.add(speakText);
		buttonPanel.add(stopText);
		/*
		Initialize new text area
		*/
		textarea=new JTextArea();
		/*
		Set the properties of text area
		*/
		textarea.setLineWrap(true);
		textarea.setWrapStyleWord(true);
		textarea.addKeyListener(this);
		/*
		Initialize new JScrollpane and add text area to scroll pane
		*/
		scrollpane=new JScrollPane(textarea);
		/*
		Add button panel and scrollpane to textpanel
		*/
		textPanel.add(scrollpane,BorderLayout.CENTER);
		textPanel.add(buttonPanel,BorderLayout.NORTH);
		/*
		Set the default value of selected voice to kevin16
		*/
		selectedVoice=new String("kevin16");
		/*
		Add textpanel to the main window.
		*/
		getContentPane().add(textPanel);
		/*
		Add new window listener to the main window
		*/
		addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent we)
			{
				System.exit(0);
			}
		});
	}
	 /** Handle the key typed event from the text field. */
    public void keyTyped(KeyEvent e) 
	{

    }

    /** Handle the key pressed event from the text field. */
    public void keyPressed(KeyEvent e) 
	{
		
    }

    /** Handle the key released event from the text field. */
    public void keyReleased(KeyEvent e) 
	{
	if (e.getSource()==textarea)
		{
			if ((textarea.getText()).length()==0)
			{
				save.setEnabled(false);
			}
			else
			{
				save.setEnabled(true);
			}	
		}
    }
	/*
	actionPerformed(): Defines the operations to be performed, when the user clicks a button or selects a menu item.
	Parameters:
			ev: An object of ActionEvent class.
	Return Type:NA
	*/
	public void actionPerformed(ActionEvent ev)
	{
		/*
		Executes when the user clicks the speak button or speak menu item.
		*/
		if((ev.getSource()==speakText)||(ev.getSource()==speak))
		{
			
			
			
			/*
			Set the value os selSpeak to the selected text
			*/
			String selSpeak=textarea.getSelectedText();
			
			/*
			Check if no text is selected
			*/
			
			
			if(selSpeak==null)
			{
				speakstring=textarea.getText();
				/*
				Check if no text is available in the textarea of the text pad.
				*/
				if(speakstring.equals(""))
					speakstring="Empty File, Please open a file and then click the Speak button";
			}
			else
				speakstring=selSpeak;
				stopText.setEnabled(true);
				speakText.setEnabled(false);
				pause.setEnabled(true);
				resume.setEnabled(true);
				stop.setEnabled(true);
			t=new Thread(this,"Button action");
			t.start();
			}
		else
		/*
		Executes when the user clicks the stop button or stop menu item.
		*/
		if((ev.getSource()==stopText)||(ev.getSource()==stop))
		{
			/*
			Invoke the closeSynthesizer() method of SpeakText class
			*/
			t.stop();
			st.closeSynthesizer();
			stop.setEnabled(false);
			pause.setEnabled(false);
			resume.setEnabled(false);
			speakText.setEnabled(true);
			stopText.setEnabled(false);
		}
		else
		/*
		Executes when the user clicks the New menu item
		*/
		if(ev.getSource()==newFile)
		{
			textarea.setText("");
			textarea.setEditable(true);
		}
		else
		/*
		Executes when the user clicks the Open menu item
		*/
		if(ev.getSource()==open)
		{
			try
			{	
				/*
				Initialize a new JFileChooser
				*/
				filechooser=new JFileChooser();
				/*
				Create and set a new FileFilter for the JFileChooser
				*/
				filechooser.setFileFilter(new javax.swing.filechooser.FileFilter()
				{
					public boolean accept(File f)
					{
						if(f.isDirectory())
						{
							return true;
						}
						String name=f.getName();
						/*
						Allows only text and java files to be opened in the user interface of text pad
						*/
						if ((name.endsWith(".txt"))||(name.endsWith(".java")))
						{
							return true;
						}
						return false;
					}
					public String getDescription()
					{
						return "Text Files";
					}
				});
				/*
				Open the JFileChooser
				*/
				filechooser.showOpenDialog(this);
				file = filechooser.getSelectedFile();
				if(file==null)
				{
					System.out.println("No file Selected");
				}
				else
				{
					/*
					Check if the selected file is a valid file
					*/
					if(file.isFile())
					{
						str = file.getAbsolutePath();
						open();
					}
					else
					{
						/*
						Print the error message if the selected file is not a valid file
						*/
						JOptionPane.showMessageDialog(null,"The selected file is not a valid File","Select another File",JOptionPane.WARNING_MESSAGE);
					}
				}
			}
			catch(Exception e) 
			{
				System.out.println("Error" + e);	
			}
		}
		else
		/*
		Executes if the user clicks the resume menu item
		*/
		if(ev.getSource()==resume)
		{
			/*
			Invoke the resumeSynthesizer() method of the SpeakText class
			*/
			t.resume();
			st.resumeSynthesizer();
			stop.setEnabled(true);
			stopText.setEnabled(true);
			pause.setEnabled(true);
		}
		else
		/*
		Executes if the user clicks the pause button
		*/
		if(ev.getSource()==pause)
		{
			/*
			Invoke the pauseSynthesizer() method of the SpeakText class
			*/
			t.suspend();
			st.pauseSynthesizer();
			resume.setEnabled(true);
		}
		else
		/*
		Executes if the user clicks the exit button
		*/
		if(ev.getSource()==exit)
		{
			System.exit(0);
		}
		else
		/*
		Executes if the user clicks the Select voice menu item
		*/
		if(ev.getSource()==selVoice)
		{
			sv.setVisible(true);
		}
		else
		/*
		Executes if the user clicks the save menu item
		*/
		if(ev.getSource()==save)
		{
			if(textarea.getText().equals(""))
				JOptionPane.showMessageDialog(null,"No file open or empty file","Warning",JOptionPane.WARNING_MESSAGE);
			else
			{
				/*
				Displays the save dialog box
				*/
				if(filechooser.showSaveDialog(TextPad.this) == JFileChooser.APPROVE_OPTION)
				{
					File fSelected = filechooser.getSelectedFile();
					try
					{
						FileWriter out = new FileWriter(fSelected);
						textarea.write(out);
						out.close();
					} 
					catch(IOException ioe) 
					{
						ioe.printStackTrace();
					}				
				}
			}			
		}
	}
	/*
	run(): Runs new thread.
		Parameters: NA
		Return Type:NA
	*/
	public void run()
	{
			/*
			Initialize a new object of SpeakText class
			*/
			st=new SpeakText(speakstring,selectedVoice);
			/*
			Invoke the speakSelText() method of SpeakText class
			*/
			st.speakSelText(this);
			/*
			Enable the stop button,pause, and resume menu items.
			*/
		
	}
	/*
	Executes if the user clicks the Open menu item
	*/
	public void open() 
	{
		try
		{
			/*
			Initialize a new FileInputStream
			*/
			fin = new FileInputStream(filechooser.getSelectedFile().getAbsolutePath());
			/*
			Initialize a new object of BufferedReader class
			*/
			BufferedReader br = new BufferedReader(new InputStreamReader(fin));
            String readLine = "";
			textarea.setText("");
            while ((readLine = br.readLine())!=null)
            {
				textarea.setText(textarea.getText()+ "\n" +readLine);
            }
			if(textarea.getText()==null)
			{
				JOptionPane.showMessageDialog(null,"The file has no content","Select another File",JOptionPane.WARNING_MESSAGE);
			}
			fin.close();
		}
		catch(IOException ioe)
		{
			System.err.println("I/O Error on Open");
		}
	}
/*
setvoice():retrieves the voice selected by the end user.
Parameters:
		str:String representing the voice selected by the end user
Return Type:NA
*/
public void setvoice(String str)
{
	selectedVoice=str;
	System.out.println(selectedVoice);
}
/*
main():Creates an object of TextPad.java class.
Parameters:
		str[]: String array to store the command line parameters.
Return Type:NA
*/
public static void main(String str[])
	{
	TextPad tp=new TextPad();
	tp.setVisible(true);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -