package myproject; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import com.borland.dbswing.*; /** * Title: A Project to hold test programs * Description: * Copyright: Copyright (c) 2001 * Company: Actis Ltd. * @author Martin Milner * @version 1.0 */ public class TextEditFrame extends JFrame { JPanel contentPane; JMenuBar jMenuBar1 = new JMenuBar(); JMenu jMenuFile = new JMenu(); JMenuItem jMenuFileExit = new JMenuItem(); JMenu jMenuHelp = new JMenu(); JMenuItem jMenuHelpAbout = new JMenuItem(); JToolBar jToolBar = new JToolBar(); JButton openButton = new JButton(); JButton saveButton = new JButton(); JButton helpButton = new JButton(); ImageIcon image1; ImageIcon image2; ImageIcon image3; JLabel statusBar = new JLabel(); BorderLayout borderLayout1 = new BorderLayout(); JButton saveAsButton = new JButton(); JMenu jMenuEdit = new JMenu(); JMenu jMenuOptions = new JMenu(); JMenuItem jMenuOptionsFont = new JMenuItem(); JMenuItem jMenuOptionsBack = new JMenuItem(); JMenuItem jMenuOptionsText = new JMenuItem(); JMenuItem jMenuEditCopy = new JMenuItem(); JMenuItem jMenuEditPaste = new JMenuItem(); JMenuItem jMenuEditCut = new JMenuItem(); JMenuItem jMenuFileOpen = new JMenuItem(); JMenuItem jMenuFileNew = new JMenuItem(); JMenuItem jMenuSaveAs = new JMenuItem(); JMenuItem jMenuFileSave = new JMenuItem(); // My variables String currFileName=null; boolean dirty=false; boolean wrap=false; JScrollPane jScrollPane1 = new JScrollPane(); JTextArea jTextArea1 = new JTextArea(); JColorChooser jColorChooser1 = new JColorChooser(); JFileChooser jFileChooser1 = new JFileChooser(); JMenuItem jMenuOptionsWrap = new JMenuItem(); FontChooser fontChooser1 = new FontChooser(); JMenuItem jMenuItem1 = new JMenuItem(); /**Construct the frame*/ public TextEditFrame() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } /**Component initialization*/ private void jbInit() throws Exception { image1 = new ImageIcon(myproject.TextEditFrame.class.getResource("openFile.gif")); image2 = new ImageIcon(myproject.TextEditFrame.class.getResource("closeFile.gif")); image3 = new ImageIcon(myproject.TextEditFrame.class.getResource("help.gif")); //setIconImage(Toolkit.getDefaultToolkit().createImage(TextEditFrame.class.getResource("[Your Icon]"))); contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(borderLayout1); this.setSize(new Dimension(593, 426)); this.setTitle("My Text Editor"); statusBar.setText(" "); jMenuFile.setText("File"); jMenuFileExit.setToolTipText("Terminate Program"); jMenuFileExit.setText("Exit"); jMenuFileExit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jMenuFileExit_actionPerformed(e); } }); jMenuHelp.setText("Help"); jMenuHelpAbout.setText("About"); jMenuHelpAbout.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jMenuHelpAbout_actionPerformed(e); } }); openButton.setIcon(image1); openButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { openButton_actionPerformed(e); } }); openButton.setToolTipText("Open File"); saveButton.setIcon(image2); saveButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { saveButton_actionPerformed(e); } }); saveButton.setToolTipText("Save File"); helpButton.setIcon(image3); helpButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { helpButton_actionPerformed(e); } }); helpButton.setToolTipText("Help"); saveAsButton.setToolTipText("Save As"); saveAsButton.setIcon(new ImageIcon(TextEditFrame.class.getResource("closeFile.gif"))); saveAsButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { saveAsButton_actionPerformed(e); } }); jMenuEdit.setText("Edit"); jMenuOptions.setText("Options"); jMenuOptionsFont.setToolTipText("Change the Font"); jMenuOptionsFont.setText("Font"); jMenuOptionsFont.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jMenuOptionsFont_actionPerformed(e); } }); jMenuOptionsBack.setToolTipText("Select a Background Colour"); jMenuOptionsBack.setText("Set Background Colour"); jMenuOptionsBack.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jMenuOptionsBack_actionPerformed(e); } }); jMenuOptionsText.setToolTipText("Select the text colour"); jMenuOptionsText.setText("Set Text Colour"); jMenuOptionsText.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jMenuOptionsText_actionPerformed(e); } }); jMenuEditCopy.setToolTipText("Copy selected text"); jMenuEditCopy.setText("Copy"); jMenuEditCopy.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jMenuEditCopy_actionPerformed(e); } }); jMenuEditPaste.setToolTipText("Paste into document"); jMenuEditPaste.setText("Paste"); jMenuEditPaste.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jMenuEditPaste_actionPerformed(e); } }); jMenuEditCut.setToolTipText("Cut selected Text"); jMenuEditCut.setText("Cut"); jMenuEditCut.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jMenuEditCut_actionPerformed(e); } }); jMenuFileOpen.setToolTipText("Open existing File"); jMenuFileOpen.setText("Open"); jMenuFileOpen.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jMenuFileOpen_actionPerformed(e); } }); jMenuFileNew.setToolTipText("Create new doument"); jMenuFileNew.setText("New"); jMenuFileNew.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jMenuFileNew_actionPerformed(e); } }); jMenuSaveAs.setToolTipText("Save file as another"); jMenuSaveAs.setText("Save As"); jMenuSaveAs.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jMenuSaveAs_actionPerformed(e); } }); jMenuFileSave.setToolTipText("Save current file"); jMenuFileSave.setText("Save"); jMenuFileSave.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jMenuFileSave_actionPerformed(e); } }); jTextArea1.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(KeyEvent e) { jTextArea1_keyPressed(e); } public void keyTyped(KeyEvent e) { jTextArea1_keyTyped(e); } }); jMenuOptionsWrap.setToolTipText("Toggle Word Wrap"); jMenuOptionsWrap.setText("Wrap"); jMenuOptionsWrap.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jMenuOptionsWrap_actionPerformed(e); } }); fontChooser1.setFrame(this); fontChooser1.setTitle("Select a Font"); fontChooser1.setSampleText("Sample Text"); jMenuItem1.setToolTipText("Print current file"); jMenuItem1.setText("Print"); jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jMenuItem1_actionPerformed(e); } }); jToolBar.add(openButton); jToolBar.add(saveButton); jToolBar.add(saveAsButton, null); jToolBar.add(helpButton); jMenuFile.add(jMenuFileNew); jMenuFile.add(jMenuFileOpen); jMenuFile.add(jMenuItem1); jMenuFile.add(jMenuFileSave); jMenuFile.add(jMenuSaveAs); jMenuFile.addSeparator(); jMenuFile.add(jMenuFileExit); jMenuHelp.add(jMenuHelpAbout); jMenuBar1.add(jMenuFile); jMenuBar1.add(jMenuEdit); jMenuBar1.add(jMenuOptions); jMenuBar1.add(jMenuHelp); this.setJMenuBar(jMenuBar1); contentPane.add(jToolBar, BorderLayout.NORTH); contentPane.add(statusBar, BorderLayout.SOUTH); contentPane.add(jScrollPane1, BorderLayout.CENTER); jScrollPane1.getViewport().add(jTextArea1, null); jMenuOptions.add(jMenuOptionsWrap); jMenuOptions.add(jMenuOptionsFont); jMenuOptions.add(jMenuOptionsBack); jMenuOptions.add(jMenuOptionsText); jMenuEdit.add(jMenuEditCut); jMenuEdit.add(jMenuEditCopy); jMenuEdit.add(jMenuEditPaste); if (TextEdit.fname != "") { openclFile(TextEdit.fname); } } // Open File specified in command-line void openclFile(String fileName) { try { File file = new File(fileName); int size = (int)file.length(); int chars_read=0; FileReader in = new FileReader(file); char[] data = new char[size]; while (in.ready()) { chars_read += in.read(data, chars_read, size - chars_read); } in.close(); jTextArea1.setText(new String(data, 0, chars_read)); this.currFileName=fileName; this.dirty=false; statusBar.setText("Opened "+fileName); updateCaption(); } catch (IOException e) { statusBar.setText("Error opening "+fileName); } } // OK to Abandon? boolean oktoAbandon() { if (!dirty) { return true; } int value = JOptionPane.showConfirmDialog(this, "Save changes?", "Text Edit", JOptionPane.YES_NO_CANCEL_OPTION) ; if (value == JOptionPane.YES_OPTION) { // yes, please save changes return saveFile(); } if (value == JOptionPane.NO_OPTION) { // no, abandon edits (i.e. return true without saving) return true; } // default is to cancel (ie:- return false) return false; } /**File | Exit action performed*/ public void jMenuFileExit_actionPerformed(ActionEvent e) { if (oktoAbandon()) { System.exit(0); } } /**Help | About action performed*/ public void jMenuHelpAbout_actionPerformed(ActionEvent e) { helpAbout(); } public void helpAbout() { TextEditFrame_AboutBox dlg = new TextEditFrame_AboutBox(this); Dimension dlgSize = dlg.getPreferredSize(); Dimension frmSize = getSize(); Point loc = getLocation(); dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x, (frmSize.height - dlgSize.height) / 2 + loc.y); dlg.setModal(true); dlg.show(); } // update title bar void updateCaption() { String caption; if (currFileName == null) { caption="untitled"; } else { caption=currFileName; } if (dirty) { caption=caption+" (modified)"; } caption="TextEdit - "+caption; this.setTitle(caption); } // Change background colour void changeBack() { Color newbg = jColorChooser1.showDialog(this, "Set Background Colour", jTextArea1.getBackground()); jTextArea1.setBackground(newbg); } // Change text colour void changeFore() { Color newfg = jColorChooser1.showDialog(this, "Set Text Colour", jTextArea1.getForeground()); jTextArea1.setForeground(newfg); } /**Overridden so we can exit when window is closed*/ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { jMenuFileExit_actionPerformed(null); } } void helpButton_actionPerformed(ActionEvent e) { helpAbout(); } void saveButton_actionPerformed(ActionEvent e) { saveFile(); } void openButton_actionPerformed(ActionEvent e) { openFile(); } void saveAsButton_actionPerformed(ActionEvent e) { saveFileas(); } void jMenuFileNew_actionPerformed(ActionEvent e) { jTextArea1.setText(""); currFileName=null; dirty=false; updateCaption(); } // Cut selected text void jMenuEditCut_actionPerformed(ActionEvent e) { jTextArea1.cut(); dirty=true; updateCaption(); } // Paste into document void jMenuEditPaste_actionPerformed(ActionEvent e) { jTextArea1.paste(); dirty=true; updateCaption(); } // Copy selected text void jMenuEditCopy_actionPerformed(ActionEvent e) { jTextArea1.copy(); } // Open File void openFile() { if (!oktoAbandon()) { return; } jFileChooser1.showOpenDialog(this); String fileName = jFileChooser1.getSelectedFile().getPath(); try { File file = new File(fileName); int size = (int)file.length(); int chars_read=0; FileReader in = new FileReader(file); char[] data = new char[size]; while (in.ready()) { chars_read += in.read(data, chars_read, size - chars_read); } in.close(); jTextArea1.setText(new String(data, 0, chars_read)); this.currFileName=fileName; this.dirty=false; statusBar.setText("Opened "+fileName); updateCaption(); } catch (IOException e) { statusBar.setText("Error opening "+fileName); } } // Save File boolean saveFile() { if (currFileName == null) { return saveFileas(); } try { File file = new File(currFileName); FileWriter out = new FileWriter(file); String text = jTextArea1.getText(); out.write(text); out.close(); this.dirty=false; statusBar.setText("Saved "+currFileName); updateCaption(); return true; } catch (IOException e) { statusBar.setText("Error saving "+currFileName); } return false; } // Save file as boolean saveFileas() { jFileChooser1.showSaveDialog(this); String fileName = jFileChooser1.getSelectedFile().getPath(); try { File file = new File(fileName); FileWriter out = new FileWriter(file); String text = jTextArea1.getText(); out.write(text); out.close(); this.dirty=false; this.currFileName=fileName; statusBar.setText("Saved as "+currFileName); updateCaption(); return true; } catch (IOException e) { statusBar.setText("Error saving as "+currFileName); } return false; } // Print File boolean printFile() { try { File printer = new File ("/home/mmilner/lp"); FileWriter out = new FileWriter(printer); String text = jTextArea1.getText(); out.write(text); out.write("\f"); out.close(); statusBar.setText("Printed "+currFileName); return true; } catch (IOException e) { statusBar.setText("Error printing "+currFileName); } return false; } // Change Font void changeFont() { fontChooser1.setSelectedFont(jTextArea1.getFont()); // Obtain the new Font from the FontChooser. // First test the return value of showDialog() to // see if the user pressed OK. if (fontChooser1.showDialog()) { // Set the font of jTextArea1 to the font // the user selected before pressing the OK button jTextArea1.setFont(fontChooser1.getSelectedFont()); } //repaints menu after item is selected this.repaint(); //Repaints text properly if some text is highlighted when font is changed. jTextArea1.repaint(); } void jMenuFileOpen_actionPerformed(ActionEvent e) { openFile(); } void jMenuFileSave_actionPerformed(ActionEvent e) { saveFile(); } void jMenuSaveAs_actionPerformed(ActionEvent e) { saveFileas(); } void jMenuOptionsFont_actionPerformed(ActionEvent e) { changeFont(); statusBar.setText("Attempted to change font"); } void jMenuOptionsBack_actionPerformed(ActionEvent e) { changeBack(); } void jMenuOptionsText_actionPerformed(ActionEvent e) { changeFore(); } // A key was pressed void jTextArea1_keyPressed(KeyEvent e) { int inspos = jTextArea1.getCaretPosition(); int key = e.getKeyCode(); // statusBar.setText("key = "+e.getKeyChar()+", code = "+key); if (key == 10) { jTextArea1.insert("\r", inspos); // statusBar.setText("You pressed enter"); } } // Key typed void jTextArea1_keyTyped(KeyEvent e) { if (!dirty) { dirty=true; updateCaption(); } } // Toggle word wrap (on word boundaries) void jMenuOptionsWrap_actionPerformed(ActionEvent e) { if (!wrap) { jTextArea1.setLineWrap(true); jTextArea1.setWrapStyleWord(true); wrap=true; } else { jTextArea1.setLineWrap(false); jTextArea1.setWrapStyleWord(false); wrap=false; } } void jMenuItem1_actionPerformed(ActionEvent e) { printFile(); } }