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

  1. /*
  2.  * @(#)ToolExample.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 ToolExample extends JApplet implements ActionListener {
  35.     private JPanel pan1;
  36.     private JEditorPane edRTF;
  37.     private EditorKit ekRTF;
  38.     private JToolBar toolMain;
  39.     private JButton btnChange;
  40.  
  41.     public void init() {
  42.         pan1 = new JPanel();
  43.  
  44.         pan1.setLayout(new BorderLayout());
  45.  
  46.         edRTF = addEditor(pan1, "test.rtf");
  47.         Hashtable actions = getActions(edRTF);
  48.  
  49.         toolMain = new JToolBar();
  50.  
  51.         // Add buttons to the toolbar
  52.         addToolButton(toolMain, "B", "Bold", "font-bold", actions);
  53.         addToolButton(toolMain, "I", "Italic", "font-italic", actions);
  54.         addToolButton(toolMain, "10", "10 pt", "font-size-10", actions);
  55.         addToolButton(toolMain, "12", "12 pt", "font-size-12", actions);
  56.         addToolButton(toolMain, "14", "14 pt", "font-size-14", actions);
  57.         addToolButton(toolMain, "16", "16 pt", "font-size-16", actions);
  58.         addToolButton(toolMain, "18", "18 pt", "font-size-18", actions);
  59.         addToolButton(toolMain, "<", "Left justify", "left-justify", actions);
  60.         addToolButton(toolMain, ">", "Right justify", "right-justify", actions);
  61.  
  62.         // Button to change background colour
  63.         btnChange = new JButton("Colour");
  64.         btnChange.addActionListener(this);
  65.         btnChange.setToolTipText("Change background");
  66.         toolMain.add(btnChange);
  67.  
  68.         pan1.add(toolMain, BorderLayout.NORTH);
  69.  
  70.         getContentPane().add(pan1);
  71.     }
  72.  
  73.  
  74.     /**
  75.      * Create editor
  76.      */
  77.     private JEditorPane addEditor(JPanel panel, String docName) {
  78.         JEditorPane editor = new JEditorPane();
  79.  
  80.         EditorKit ek = editor.getEditorKitForContentType("application/rtf");
  81.  
  82.         editor.setEditorKit(ek);
  83.  
  84.         editor.setEditable(true);
  85.  
  86.         try {
  87.             ek.read(openDataFile(docName), editor.getDocument(), 0);
  88.         }
  89.         catch(BadLocationException e) {
  90.             System.err.println(
  91.                 "Start position in doc doesn't exist: "
  92.                     + e
  93.             );
  94.         }
  95.         catch(IOException e) {
  96.             System.err.println(
  97.                 "Can't open file: "
  98.                     + docName
  99.                     + e
  100.             );
  101.         }
  102.  
  103.         panel.add(new JScrollPane(editor), BorderLayout.CENTER);
  104.  
  105.         return editor;
  106.     }
  107.  
  108.     private Hashtable getActions(JEditorPane editor) {
  109.         EditorKit ek = editor.getEditorKit();
  110.  
  111.         Action actionArray[] = ek.getActions();
  112.  
  113.         Hashtable actions = new Hashtable();
  114.  
  115.         for (int i = 0; i < actionArray.length; i++)
  116.             actions.put(
  117.                 actionArray[i].getValue(Action.NAME),
  118.                 actionArray[i]
  119.             );
  120.  
  121.         return actions;
  122.     }
  123.  
  124.     /**
  125.      * Add a button to a toolbar, displaying text str and with action a
  126.      */
  127.     private void addToolButton(JToolBar toolbar, String str, 
  128.             String desc, String a, Hashtable actions) {
  129.         JButton btn = new JButton(str);
  130.         btn.setToolTipText(desc);
  131.         btn.addActionListener((Action)actions.get(a));
  132.         toolbar.add(btn);
  133.     }
  134.  
  135.     /**
  136.      * Method to pick up clicks to the colour change button
  137.      */
  138.     public void actionPerformed(ActionEvent e) {
  139.         edRTF.setBackground(
  140.             JColorChooser.showDialog(
  141.                 this, 
  142.                 "ToolExample's colour chooser",
  143.                 Color.white
  144.             )
  145.         );
  146.         edRTF.repaint();
  147.     }
  148.  
  149.     /**
  150.      * Open the data file. 
  151.      *
  152.      * @param    dataFile - the name of the datafile
  153.      * @returns the input stream for the file
  154.      */
  155.     private DataInputStream openDataFile(String dataFile) {
  156.         URL fileURL;
  157.         DataInputStream in = null;
  158.  
  159.         try {
  160.             fileURL = new URL(getDocumentBase(), dataFile);
  161.             in = new DataInputStream(new BufferedInputStream(fileURL.openStream()));
  162.         }
  163.         catch (IOException e) {
  164.             System.err.println("Cannot open " + dataFile + ": " + e.getMessage());
  165.         }
  166.         return in;
  167.     }
  168. }
  169.  
  170.  
  171.