import javax.swing.*;
import javax.swing.filechooser.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public class StackShell implements ActionListener
{
JFrame jf = new JFrame("Stack Interpreter");
JTextArea codeArea = new JTextArea(25,40);
JTextArea outputArea = new JTextArea(30,40);
JScrollPane codePane = new JScrollPane(codeArea);
JScrollPane outputPane = new JScrollPane(outputArea);
JPanel displayPanel = new JPanel();
JMenuBar bar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
JMenu programMenu = new JMenu("Program");
JMenuItem newItem = new JMenuItem("New");
JMenuItem openItem = new JMenuItem("Open...");
JMenuItem saveItem = new JMenuItem("Save");
JMenuItem saveAsItem = new JMenuItem("Save As...");
JMenuItem exitItem = new JMenuItem("Exit");
JMenuItem runItem = new JMenuItem("Run Stack Program");
JLabel codeLabel = new JLabel("Editor >>>");
JLabel outputLabel = new JLabel("Output >>>");
int codeLength = 0;
String fileName, pathName = "H:";
public StackShell()
{
jf.setSize(800,600);
jf.setJMenuBar(bar);
bar.add(fileMenu);
bar.add(programMenu);
fileMenu.setMnemonic('F');
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(saveAsItem);
fileMenu.add(exitItem);
programMenu.setMnemonic('P');
programMenu.add(runItem);
exitItem.addActionListener(this);
exitItem.setMnemonic('X');
runItem.addActionListener(this);
runItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_F5, 0));
runItem.setMnemonic('R');
openItem.addActionListener(this);
openItem.setMnemonic('O');
openItem.setAccelerator (KeyStroke.getKeyStroke ('O', KeyEvent.CTRL_MASK));
saveItem.addActionListener(this);
saveItem.setMnemonic('S');
saveItem.setAccelerator (KeyStroke.getKeyStroke ('S', KeyEvent.CTRL_MASK));
saveAsItem.addActionListener(this);
saveAsItem.setMnemonic('A');
newItem.addActionListener(this);
displayPanel.add(codeLabel);
codeLabel.setForeground(new Color(0,0,150));
displayPanel.add(codePane);
displayPanel.add(outputLabel);
outputLabel.setForeground(Color.green);
displayPanel.add(outputPane);
codeArea.setLineWrap(true);
codeArea.setFont(new Font("Monospaced", Font.BOLD, 14));
codeArea.setBackground(new Color(0,0,150));
codeArea.setForeground(Color.white);
codeArea.setCaretColor(Color.white);
codeArea.setMargin(new Insets(3,3,3,3));
outputArea.setEditable(false);
outputArea.setFont(new Font("Monospaced", Font.PLAIN, 12));
outputArea.setBackground(Color.black);
outputArea.setForeground(Color.white);
outputArea.setMargin(new Insets(3,3,3,3));
jf.getContentPane().add(displayPanel,"Center");
jf.pack();
jf.setVisible(true);
jf.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
}
public String[] getCode()
{
String memory[] = new String[1000];
String s = codeArea.getText(), next;
StringTokenizer tokens = new StringTokenizer(s, "\n");
codeLength = 0;
while (tokens.hasMoreTokens())
memory[codeLength++] = tokens.nextToken();
return memory;
}
public void execute()
{
String[] code = getCode();
outputArea.setText("");
/***********************************************************************
Your code goes here. You don't need to do anything any where
else in the program.
**********************************************************************/
}
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == runItem)
execute();
else if (e.getSource() == exitItem)
System.exit(0);
else if (e.getSource() == newItem)
{
codeArea.setText("");
outputArea.setText("");
}
else if (e.getSource() == saveItem)
{
if (fileName != null)
{
try
{
FileWriter fw = new FileWriter(fileName);
PrintWriter pw = new PrintWriter(fw);
if (codeArea != null)
pw.println(codeArea.getText());
pw.close();
} catch (IOException ioe)
{
System.out.println("The following error occurred " + ioe);
}
}
else
{
Toolkit.getDefaultToolkit ().beep ();
JOptionPane.showMessageDialog (jf, "No filename. Use Save As... instead.",
"You Need a File Name.", JOptionPane.ERROR_MESSAGE);
}
codeArea.requestFocus ();
}
else if (e.getSource() == saveAsItem)
{
JFileChooser chooser = new JFileChooser (pathName);
FileNameExtensionFilter hypoFilter = new FileNameExtensionFilter("STACK files (*.stack)","stack");
chooser.addChoosableFileFilter(hypoFilter);
chooser.setFileFilter(hypoFilter);
int returnVal = chooser.showSaveDialog (jf);
if (returnVal == JFileChooser.APPROVE_OPTION)
{
File file = chooser.getSelectedFile ();
String oldFileName = fileName;
fileName = file.getPath ();
if (!fileName.endsWith(".stack"))
fileName += ".stack";
boolean fileExists = true;
try
{
FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
br.close();
} catch(IOException ioe)
{
fileExists = false;
}
if (fileExists)
{
Toolkit.getDefaultToolkit ().beep ();
int choice = JOptionPane.showConfirmDialog (jf,
"The file already exists. Do you wish to replace it?",
"File already exists", JOptionPane.YES_NO_OPTION);
if (choice == JOptionPane.NO_OPTION)
{
fileName = oldFileName;
return;
}
}
jf.setTitle (fileName);
try
{
FileWriter fw = new FileWriter(fileName);
PrintWriter pw = new PrintWriter(fw);
if (codeArea != null)
pw.println(codeArea.getText());
pw.close();
} catch (IOException ioe)
{
System.out.println("The following error occurred " + ioe);
}
codeArea.requestFocus ();
}
}
else if (e.getSource() == openItem)
{
JFileChooser chooser = new JFileChooser (pathName);
FileNameExtensionFilter hypoFilter = new FileNameExtensionFilter("STACK files (*.stack)","stack");
chooser.addChoosableFileFilter(hypoFilter);
chooser.setFileFilter(hypoFilter);
int returnVal = chooser.showOpenDialog (jf);
if (returnVal == JFileChooser.APPROVE_OPTION)
{
File file = chooser.getSelectedFile ();
fileName = file.getPath ();
pathName = fileName.substring (0, fileName.lastIndexOf ('\\'));
jf.setTitle (fileName);
String s = "";
String document = "";
try
{
FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);
s = br.readLine();
document = s;
while (s != null)
{
s = br.readLine();
if (s!=null)
document = document + "\n" + s;
}
br.close();
} catch(IOException ioe)
{
System.out.println("The following error occurred " + ioe);
}
codeArea.setText (document);
codeArea.setCaretPosition (0);
codeArea.requestFocus ();
}
}
}
public static void main(String[] args)
{
StackShell ss = new StackShell();
}
}
|