//import the packages for using the classes in them into this class
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.*;
/**
*A PUBLIC CLASS FOR ACTIONS.JAVA
*/
public class Actions {
Notepad n;
private String fileContent = null; //to get the text from the text area
private String fileName = null; //for using the name of the file
private JFileChooser jfc = new JFileChooser( "." ); //for using a open & save dialog
private ExampleFileFilter filter = new ExampleFileFilter();
//declaration of the private variables used in the program
private String findWord; //for searching & finding the word
private int findIndex = -1; //for using the object in the Notepad.java
public Actions( Notepad n ){ {
this.n = n;
} {
//filter the kind of files, we want only TXT file
filter.addExtension( "txt" );
//to set a description for the file (TXT)
filter.setDescription( "TXT Documents" );
//setting the FileFilter to JFileChooser
jfc.setFileFilter( filter );
}
}
/**
*THIS IS THE WAY FOR OPENING THE TEXT FILE
*/
private void _open() {
int returnVal = jfc.showOpenDialog( n ); //to show JFileChooser
if( returnVal == JFileChooser.APPROVE_OPTION ) {
//to erase any text in the text area before adding new text
n.getTextComponent().setText( null );
try {
//to get the name of the selected file
fileName = jfc.getSelectedFile().getPath();
//to read the selected file
Reader in = new FileReader( jfc.getSelectedFile() );
StringBuilder sb = new StringBuilder();
//100000 is the max. char can be written in the text area
char[] buff = new char[100000];
int nch;
while( ( nch = in.read( buff, 0, buff.length ) ) != -1 ) {
sb.append( buff, 0, nch );
}
fileContent = sb.toString();
n.getTextComponent().setText( fileContent );
}
catch( FileNotFoundException x ) {
// no action
}
catch( IOException ioe ) {
System.err.println( "I/O Error on Open" );
}
}
n.setTitle( jfc.getSelectedFile().getName() + " - JAVA Notepad" );
}
/**
*THIS IS THE WAY FOR SAVING THE TEXT IN THE SAME FILE
*/
private void _save() {
//initializing 'fout' to write all text in the selected file
try {
PrintWriter fout = new PrintWriter( new FileWriter( jfc.getSelectedFile() ) );
//for getting the text from the text area
fileContent = n.getTextComponent().getText();
//using StringTokenizer for the 'fileContent' String
StringTokenizer st=new StringTokenizer( fileContent,System.getProperty( "line.separator" ) );
while( st.hasMoreTokens() ) {
//write the string (text) in the selected file
fout.println( st.nextToken() );
}
//closing fout
fout.close();
}
catch( IOException ioe ) {
System.err.println( "I/O Error on Save" );
}
n.setTitle( jfc.getSelectedFile().getName() + " - JAVA Notepad" );
}
/**
*@see ABOUT.JAVA
*it's a Message Dialog to show the information about this program
*/
public void about() {
JOptionPane.showMessageDialog( null, new About(),"About Notepad",JOptionPane.PLAIN_MESSAGE );
}
//to copy the selected text
public void copy() {
n.getTextComponent().copy();
}
//to cut the selected text
public void cut() {
n.getTextComponent().cut();
}
public final void exit$$Base() {
System.exit( 0 );
}
/**
*If we want to exit from the program,
*first we want to know if the text area is empty or not,
*second we want to kwnow if the text was saved or not.
*If the text area isn't empty & the text wasn't saved befor this time,
*then the program display ->
*for the user an option for saving the text in a new file or in the same file
*/
public void exit() {
/**
*if the text area isn't empty & if the text area hasn't a text which
*not saved befor (fileContent != null)
*/
if( !n.getTextComponent().getText().equals( "" ) && !n.getTextComponent().getText().equals( fileContent ) ) {
//if there was no file opened or saved
if( fileName == null ) {
/**
*this method has 3 options (1 = YES, 2 = NO, 3 = Cancel)
*this is an option pop up to the user, for saving the old text or not
*/
int option = JOptionPane.showConfirmDialog( null,"Do you want to save the changes ??" );
/**
*if the user click on YES button,
*then the program will be saved the text & close the program
*/
if( option == 0 ) {
//for saving the text into new file
saveAs();
//for closing the program
exit$$Base();
}
/**
*if the user click on NO button,
*then the program will be closed without save the text
*/
if( option == 1 ) {
//for closing the program
exit$$Base();
}
}
else {
//if there was a text which was be opend or saved
/**
*this method has 3 options (1 = YES, 2 = NO, 3 = Cancel)
*this is an option pop up to the user, for saving the old text or not
*/
int option = JOptionPane.showConfirmDialog( null,"Do you want to save the changes ??" );
/**
*if the user click on YES button,
*then the program will be saved the text & close the program
*/
if( option == 0 ) {
//for saving the text into the same file
_save();
//for closing the program
exit$$Base();
}
/**
*if the user click on NO button,
*then the program will be closed without save the text
*/
if( option == 1 ) {
//for closing the program
exit$$Base();
}
}
}
else {
/**
*if the text was be opened or saved before but wasn't be changed,
*and we want to close the program. This option will be actived
*/
//for closing the program
exit$$Base();
}
}
//this is a method for searching the input text from the text area
public void find() {
try {
int index;
findWord = JOptionPane.showInputDialog( "Type the word to find" );
findIndex = n.getTextComponent().getText().indexOf( findWord );
if ( findIndex == -1 ) {
JOptionPane.showMessageDialog( null,"Word not found!","No match",JOptionPane.WARNING_MESSAGE );
}
else {
selectFound();
}
}
catch ( Exception ex ) {}
}
public void findNext() {
if ( findIndex == -1 )
return;
findIndex = n.getTextComponent().getText().indexOf( findWord, findIndex+1 );
if ( findIndex == -1 ) {
JOptionPane.showMessageDialog( null,"Search wrapped!","Search wrapped",JOptionPane.WARNING_MESSAGE );
findIndex = n.getTextComponent().getText().indexOf( findWord );
}
if ( findIndex != -1 )
selectFound();
}
/**
*If we want to write a new text, first we want to know if the text area is empty or not,
*second we want to kwnow if the text was saved or not.
*If the text area isn't empty & the text wasn't saved befor this time, then the program display ->
*for the user an option for saving the text in a new file or in the same file
*/
public void newFile() {
/**
*if the text area isn't empty & if the text area hasn't
*a text not saved befor (fileContent != null)
*/
if( !n.getTextComponent().getText().equals( "" ) && !n.getTextComponent().getText().equals( fileContent ) ) {
/**
*here, we have 2 thing, first if the text wasn't be opened or saved befor
*second if the text was be opened or saved
*/
//if there was no file opened or saved
if( fileName == null ) {
/**
*this method has 3 options (1 = YES, 2 = NO, 3 = Cancel)
*this is an option pop up to the user, for saving the old text or not
*/
int option = JOptionPane.showConfirmDialog( null,"Do you want to save the changes ??" );
//if the user click on YES button,
//then the program will save the text & make a new text area
if( option == 0 ) {
//to save the text into a new file
saveAs();
//to create new getTextComponent() after saving the old getTextComponent()
n.getTextComponent().setText( "" );
}
//if the user click on NO button
if( option == 1 ) {
//to create new getTextComponent() without saving the old getTextComponent()
n.getTextComponent().setText( "" );
}
}
else {
//if there was a text which was be opend or saved
/**
*this method has 3 options (1 = YES, 2 = NO, 3 = Cancel)
*this is an option pop up to the user, for saving the old text or not
*/
int option = JOptionPane.showConfirmDialog( null,"Do you want to save the changes ??" );
/**
*if the user click on YES button,
*then the program will save the text into the old file &
*make a new text area,,,
*/
if( option == 0 ) {
_save();
//to create new getTextComponent() after saving the old getTextComponent()
n.getTextComponent().setText( "" );
}
//if the user click on NO button
if( option == 1 ) {
//to create new getTextComponent() without saving the old getTextComponent()
n.getTextComponent().setText( "" );
}
}
}
else {
/**
*if the text was be opened or saved before but wasn't be changed,
*and we want to write a new text,,, this option will be actived
*/
n.getTextComponent().setText( "" );
}
n.setTitle( "Untitled - JAVA Notepad" );
}
/**
*If we want to open a new text, first we want to know if the text area
* is empty or not, second we want to kwnow if the text was saved or not.
*If the text area isn't empty & the text wasn't saved befor this time,
*then the program display for the user an option for saving the text
*in a new file or in the same file
*/
public void open() {
/**
*if the text area isn't empty & if the text area hasn't a text which
*not saved befor (fileContent != null)
*/
if( !n.getTextComponent().getText().equals( "" ) && !n.getTextComponent().getText().equals( fileContent ) ) {
/**
*here, we have 2 thing, first if the text wasn't be opened or saved befor
*second if the text was be opened or saved
*/
//if there was no file opened or saved
if( fileName == null ) {
/**
*this method has 3 options (1 = YES, 2 = NO, 3 = Cancel)
*this is an option pop up to the user, for saving the old text or not
*/
int option = JOptionPane.showConfirmDialog( null,"Do you want to save the changes ??" );
//if the user click on YES button,
//then the program will be saved the text & opened a new documents
if( option == 0 ) {
//for saving the text in a new file
saveAs();
//for opening the new documents
_open();
}
/**
*if the user click on NO button,
*the program will be opened the new documents
*/
if( option == 1 ) {
//for opening the new documents
_open();
}
}
else {
//if there was a text which was be opend or saved
/**
*this method has 3 options (1 = YES, 2 = NO, 3 = Cancel)
*this is an option pop up to the user, for saving the old text or not
*/
int option = JOptionPane.showConfirmDialog( null,"Do you want to save the changes ??" );
/**
*if the user click on YES button,
*then the program will save the text into the same file &
*open the new documents
*/
if( option == 0 ) {
//for saving the text into the same file
_save();
//for opening the new documents
_open();
}
/**
*if the user click on NO button,
*the program will be opened the new documents
*/
if( option == 1 ) {
//for opening the new documents
_open();
}
}
}
else {
/**
*if the text was be opened or saved before but wasn't be changed,
*and we want to open a new document,,, this option will be actived
*/
//for opening the new documents
_open();
}
}
//to paste the selected text
public void paste() {
n.getTextComponent().paste();
}
/**
*THIS FROM SUN WEBSITE (@Print.java)
*if we want to print the text, we can do this by print method
*/
public void print() {
//import printer class
Print.printComponent( n.getTextComponent() );
}
/**
*THIS IS FOR SAVE ACTION, SaveAs ACTION has saveAs() method
*If we want to save a new text, then we want to know
*if the text was saved befor or not.
*If the text wasn't be saved befor, then we will use saveAs()
*If the text was be save befor, then we will use save()
*/
public void save() {
/**
*if String fileName is null, then using saveAs().
*Because there was no file was be saved
*/
if ( fileName == null ) {
saveAs();
}
else {
/**
*if String fileName has a String (file name), then using save().
*Because we want to save the new text in the same file.
*if the user want to save the all text (old & new text) in a new file, ->
*he can presses SaveAs button (@saveAs())
*/
_save();
}
}
/**
*THIS IS THE WAY FOR SAVING THE TEXT IN A NEW FILE
*/
public void saveAs() {
//filter the kind of files, we want only TXT file
filter.addExtension( "txt" );
//to set a description for the file (TXT)
filter.setDescription( "TXT Documents" );
//setting the FileFilter to JFileChooser
jfc.setFileFilter( filter );
int returnVal = jfc.showSaveDialog( n );
if( returnVal == JFileChooser.APPROVE_OPTION ) {
//initializing the PrintWriter, to save the text in a new file
PrintWriter fout = null;
try {
fout = new PrintWriter( new FileWriter( jfc.getSelectedFile() + ".txt" ) );
//getting the text from the text area
fileContent = n.getTextComponent().getText();
//getting the name of the selected file
fileName = jfc.getSelectedFile().getPath();
//using StringTokenizer for the 'fileContent' String
StringTokenizer st=new StringTokenizer( fileContent,System.getProperty( "line.separator" ) );
while( st.hasMoreTokens() ) {
//write the string (text) in the selected file
fout.println( st.nextToken() );
}
//closing 'fout'
fout.close();
}
catch( IOException ioe ) {
System.err.println( "I/O Error on Save" );
}
}
n.setTitle( jfc.getSelectedFile().getName() + " - JAVA Notepad" );
}
//to select all the text
public void selectAll() {
n.getTextComponent().selectAll();
}
private void selectFound() {
n.getTextComponent().grabFocus();
n.getTextComponent().select( findIndex, findIndex + findWord.length() );
}
//for wraping the line & wraping the style word
public void setStyle( String style ) {
n.getTextPane().setCharacterAttributes( n.getTextPane().getStyledDocument().getStyle( style ), true );
}
}