home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / java / MyEditor.java < prev    next >
Encoding:
Java Source  |  1999-11-28  |  4.3 KB  |  170 lines

  1. /*
  2.  * @(#)MyEditor.java    1.0 99/11/27
  3.  * 
  4.  * Copyright (c) 1999, David Griffiths. All Rights Reserved.
  5.  * 
  6.  * This software is the proprietary information of David Griffiths.
  7.  * This source code may not be published or redistributed without the 
  8.  * express permission of the author. 
  9.  * 
  10.  * THE AUTHOR MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY 
  11.  * OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
  12.  * THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  13.  * PURPOSE, OR NON-INFRINGEMENT. THE AUTHOR SHALL NOT BE LIABLE FOR ANY DAMAGES
  14.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  15.  * THIS SOFTWARE OR ITS DERIVATIVES.
  16.  * 
  17.  */
  18.  
  19. import java.awt.*;
  20. import java.util.*;
  21. import java.awt.event.*;
  22. import java.net.*;
  23. import java.io.*;
  24. import java.applet.*;
  25. import com.sun.java.swing.*;
  26. import com.sun.java.swing.text.*;
  27. import com.sun.java.swing.preview.*;
  28. import com.sun.java.swing.text.html.*;
  29. import com.sun.java.swing.event.*;
  30.  
  31. /**
  32.  * An example showing a toolbar connected to an RTF editor.
  33.  */
  34. public class MyEditor extends JPanel implements ActionListener {
  35.     private JPanel pan1;
  36.     private JEditorPane edRTF;
  37.     private EditorKit ekRTF;
  38.     private JToolBar toolMain;
  39.     private JApplet applet;
  40.     private JButton btnChange;
  41.  
  42.     public MyEditor(JApplet applet) {
  43.         setLayout(new BorderLayout());
  44.  
  45.         this.applet = applet;
  46.  
  47.         edRTF = addEditor(this, "test.rtf");
  48.         Hashtable actions = getActions(edRTF);
  49.  
  50.         toolMain = new JToolBar();
  51.  
  52.         // Add buttons to the toolbar
  53.         addToolButton(toolMain, "B", "Bold", "font-bold", actions);
  54.         addToolButton(toolMain, "I", "Italic", "font-italic", actions);
  55.         addToolButton(toolMain, "10", "10 pt", "font-size-10", actions);
  56.         addToolButton(toolMain, "12", "12 pt", "font-size-12", actions);
  57.         addToolButton(toolMain, "14", "14 pt", "font-size-14", actions);
  58.         addToolButton(toolMain, "16", "16 pt", "font-size-16", actions);
  59.         addToolButton(toolMain, "18", "18 pt", "font-size-18", actions);
  60.         addToolButton(toolMain, "<", "Left justify", "left-justify", actions);
  61.         addToolButton(toolMain, ">", "Right justify", "right-justify", actions);
  62.  
  63.         // Button to change background colour
  64.         btnChange = new JButton("Colour");
  65.         btnChange.addActionListener(this);
  66.         btnChange.setToolTipText("Change background");
  67.         toolMain.add(btnChange);
  68.  
  69.         add(toolMain, BorderLayout.NORTH);
  70.     }
  71.  
  72.  
  73.     /**
  74.      * Create editor
  75.      */
  76.     private JEditorPane addEditor(JPanel panel, String docName) {
  77.         JEditorPane editor = new JEditorPane();
  78.  
  79.         EditorKit ek = editor.getEditorKitForContentType("application/rtf");
  80.  
  81.         editor.setEditorKit(ek);
  82.  
  83.         editor.setEditable(true);
  84.  
  85.         try {
  86.             ek.read(openDataFile(docName), editor.getDocument(), 0);
  87.         }
  88.         catch(BadLocationException e) {
  89.             System.err.println(
  90.                 "Start position in doc doesn't exist: "
  91.                     + e
  92.             );
  93.         }
  94.         catch(IOException e) {
  95.             System.err.println(
  96.                 "Can't open file: "
  97.                     + docName
  98.                     + e
  99.             );
  100.         }
  101.  
  102.         panel.add(new JScrollPane(editor), BorderLayout.CENTER);
  103.  
  104.         return editor;
  105.     }
  106.  
  107.     private Hashtable getActions(JEditorPane editor) {
  108.         EditorKit ek = editor.getEditorKit();
  109.  
  110.         Action actionArray[] = ek.getActions();
  111.  
  112.         Hashtable actions = new Hashtable();
  113.  
  114.         for (int i = 0; i < actionArray.length; i++)
  115.             actions.put(
  116.                 actionArray[i].getValue(Action.NAME),
  117.                 actionArray[i]
  118.             );
  119.  
  120.         return actions;
  121.     }
  122.  
  123.     /**
  124.      * Add a button to a toolbar, displaying text str and with action a
  125.      */
  126.     private void addToolButton(JToolBar toolbar, String str, 
  127.             String desc, String a, Hashtable actions) {
  128.         JButton btn = new JButton(str);
  129.         btn.setToolTipText(desc);
  130.         btn.addActionListener((Action)actions.get(a));
  131.         toolbar.add(btn);
  132.     }
  133.  
  134.     /**
  135.      * Method to pick up clicks to the colour change button
  136.      */
  137.     public void actionPerformed(ActionEvent e) {
  138.         edRTF.setBackground(
  139.             JColorChooser.showDialog(
  140.                 this, 
  141.                 "MyEditor's colour chooser",
  142.                 Color.white
  143.             )
  144.         );
  145.         edRTF.repaint();
  146.     }
  147.  
  148.     /**
  149.      * Open the data file. 
  150.      *
  151.      * @param    dataFile - the name of the datafile
  152.      * @returns the input stream for the file
  153.      */
  154.     private DataInputStream openDataFile(String dataFile) {
  155.         URL fileURL;
  156.         DataInputStream in = null;
  157.  
  158.         try {
  159.             fileURL = new URL(applet.getDocumentBase(), dataFile);
  160.             in = new DataInputStream(new BufferedInputStream(fileURL.openStream()));
  161.         }
  162.         catch (IOException e) {
  163.             System.err.println("Cannot open " + dataFile + ": " + e.getMessage());
  164.         }
  165.         return in;
  166.     }
  167. }
  168.  
  169.  
  170.