home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 November / Chip_1998-11_cd.bin / tema / Cafe / jfc.bin / Stylepad.java < prev    next >
Text File  |  1998-02-26  |  8KB  |  287 lines

  1. /*
  2.  * @(#)Stylepad.java    1.4 98/01/21
  3.  * 
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  */
  20.  
  21.  
  22. import java.awt.*;
  23. import java.awt.event.*;
  24. import java.net.URL;
  25. import java.util.Locale;
  26. import java.util.MissingResourceException;
  27. import java.util.ResourceBundle;
  28. import com.sun.java.swing.text.*;
  29. import com.sun.java.swing.*;
  30.  
  31. import java.io.*;
  32.  
  33. /**
  34.  * Sample application using JTextPane.
  35.  *
  36.  * @author Timothy Prinzing
  37.  * @version 1.4 01/21/98
  38.  */
  39. public class Stylepad extends Notepad {
  40.  
  41.     private static ResourceBundle resources;
  42.  
  43.     static {
  44.         try {
  45.             resources = ResourceBundle.getBundle("Stylepad", 
  46.                                                  Locale.getDefault());
  47.         } catch (MissingResourceException mre) {
  48.             System.err.println("Stylepad.properties not found");
  49.             System.exit(0);
  50.         }
  51.     }
  52.  
  53.     public Stylepad() {
  54.     super();
  55.     }
  56.  
  57.     public static void main(String[] args) {
  58.         String vers = System.getProperty("java.version");
  59.         if (vers.compareTo("1.1.2") < 0) {
  60.             System.out.println("!!!WARNING: Swing must be run with a " +
  61.                                "1.1.2 or higher version VM!!!");
  62.         }
  63.         JFrame frame = new JFrame();
  64.         frame.setTitle(resources.getString("Title"));
  65.     frame.setBackground(Color.lightGray);
  66.     frame.getContentPane().setLayout(new BorderLayout());
  67.     frame.getContentPane().add("Center", new Stylepad());
  68.     frame.addWindowListener(new AppCloser());
  69.     frame.pack();
  70.     frame.setSize(600, 480);
  71.         frame.show();
  72.     }
  73.  
  74.     /**
  75.      * Fetch the list of actions supported by this
  76.      * editor.  It is implemented to return the list
  77.      * of actions supported by the superclass
  78.      * augmented with the actions defined locally.
  79.      */
  80.     public Action[] getActions() {
  81.     Action[] defaultActions = {
  82.         new NewAction(),
  83.         new OpenAction(),
  84.         new SaveAction()
  85.     };
  86.     return TextAction.augmentList(super.getActions(), defaultActions);
  87.     }
  88.  
  89.     /**
  90.      * Try and resolve the resource name in the local
  91.      * resource file, and if not found fall back to
  92.      * the superclass resource file.
  93.      */
  94.     protected String getResourceString(String nm) {
  95.     String str;
  96.     try {
  97.         str = this.resources.getString(nm);
  98.     } catch (MissingResourceException mre) {
  99.         str = super.getResourceString(nm);
  100.     }
  101.     return str;
  102.     }
  103.  
  104.     /**
  105.      * Create an editor to represent the given document.  
  106.      */
  107.     protected JTextComponent createEditor() {
  108.     StyleContext sc = new StyleContext();
  109.     DefaultStyledDocument doc = new DefaultStyledDocument(sc);
  110.     initDocument(doc, sc);
  111.     return new JTextPane(doc);
  112.     }
  113.  
  114.     /**
  115.      * Create a menu for the app.  This is redefined to trap 
  116.      * a couple of special entries for now.
  117.      */
  118.     protected JMenu createMenu(String key) {
  119.     if (key.equals("color")) {
  120.         return createColorMenu();
  121.     } 
  122.     return super.createMenu(key);
  123.     }
  124.  
  125.  
  126.     // this will soon be replaced
  127.     JMenu createColorMenu() {
  128.     ActionListener a;
  129.     JMenuItem mi;
  130.     JMenu menu = new JMenu(getResourceString("color" + labelSuffix));
  131.     mi = new JMenuItem(resources.getString("Red"));
  132.     mi.setHorizontalTextPosition(JButton.RIGHT);
  133.     mi.setIcon(new ColoredSquare(Color.red));
  134.     a = new StyledEditorKit.ForegroundAction("set-foreground-red", Color.red);
  135.     //a = new ColorAction(se, Color.red);
  136.     mi.addActionListener(a);
  137.     menu.add(mi);
  138.     mi = new JMenuItem(resources.getString("Green"));
  139.     mi.setHorizontalTextPosition(JButton.RIGHT);
  140.     mi.setIcon(new ColoredSquare(Color.green));
  141.     a = new StyledEditorKit.ForegroundAction("set-foreground-green", Color.green);
  142.     //a = new ColorAction(se, Color.green);
  143.     mi.addActionListener(a);
  144.     menu.add(mi);
  145.     mi = new JMenuItem(resources.getString("Blue"));
  146.     mi.setHorizontalTextPosition(JButton.RIGHT);
  147.     mi.setIcon(new ColoredSquare(Color.blue));
  148.     a = new StyledEditorKit.ForegroundAction("set-foreground-blue", Color.blue);
  149.     //a = new ColorAction(se, Color.blue);
  150.     mi.addActionListener(a);
  151.     menu.add(mi);
  152.  
  153.     return menu;
  154.     }
  155.  
  156.     void initDocument(DefaultStyledDocument doc, StyleContext sc) {
  157.     Wonderland w = new Wonderland(doc, sc);
  158.     Icon alice = new ImageIcon(resources.getString("aliceGif"));
  159.     w.loadDocument();
  160.     }
  161.  
  162.     JComboBox createFamilyChoices() {
  163.         JComboBox b = new JComboBox();
  164.     String[] fonts = getToolkit().getFontList();
  165.     for (int i = 0; i < fonts.length; i++) {
  166.         b.addItem(fonts[i]);
  167.     }
  168.     return b;
  169.     }
  170.  
  171.     /**
  172.      * Trys to read a file which is assumed to be a 
  173.      * serialization of a document.
  174.      */
  175.     class OpenAction extends AbstractAction {
  176.  
  177.     OpenAction() {
  178.         super(openAction);
  179.     }
  180.  
  181.         public void actionPerformed(ActionEvent e) {
  182.         Frame frame = getFrame();
  183.         if (fileDialog == null) {
  184.         fileDialog = new FileDialog(frame);
  185.         }
  186.         fileDialog.setMode(FileDialog.LOAD);
  187.         fileDialog.show();
  188.         
  189.         String file = fileDialog.getFile();
  190.         if (file == null) {
  191.         return;
  192.         }
  193.         String directory = fileDialog.getDirectory();
  194.         File f = new File(directory, file);
  195.         if (f.exists()) {
  196.         try {
  197.             FileInputStream fin = new FileInputStream(f);
  198.             ObjectInputStream istrm = new ObjectInputStream(fin);
  199.             Document doc = (Document) istrm.readObject();
  200.             getEditor().setDocument(doc);
  201.             frame.setTitle(file);
  202.             validate();
  203.         } catch (IOException io) {
  204.             // should put in status panel
  205.             System.err.println("IOException: " + io.getMessage());
  206.         } catch (ClassNotFoundException cnf) {
  207.             // should put in status panel
  208.             System.err.println("Class not found: " + cnf.getMessage());
  209.         }
  210.         } else {
  211.         // should put in status panel
  212.         System.err.println("No such file: " + f);
  213.         }
  214.     }
  215.     }
  216.  
  217.     /**
  218.      * Trys to write the document as a serialization.
  219.      */
  220.     class SaveAction extends AbstractAction {
  221.  
  222.     SaveAction() {
  223.         super(saveAction);
  224.     }
  225.  
  226.         public void actionPerformed(ActionEvent e) {
  227.         Frame frame = getFrame();
  228.         if (fileDialog == null) {
  229.         fileDialog = new FileDialog(frame);
  230.         }
  231.         fileDialog.setMode(FileDialog.SAVE);
  232.         fileDialog.show();
  233.         String file = fileDialog.getFile();
  234.         if (file == null) {
  235.         return;
  236.         }
  237.         String directory = fileDialog.getDirectory();
  238.         File f = new File(directory, file);
  239.         try {
  240.         FileOutputStream fstrm = new FileOutputStream(f);
  241.         ObjectOutput ostrm = new ObjectOutputStream(fstrm);
  242.         ostrm.writeObject(getEditor().getDocument());
  243.         ostrm.flush();
  244.         } catch (IOException io) {
  245.         // should put in status panel
  246.         System.err.println("IOException: " + io.getMessage());
  247.         }
  248.     }
  249.     }
  250.  
  251.     /**
  252.      * Creates an empty document.
  253.      */
  254.     class NewAction extends AbstractAction {
  255.  
  256.     NewAction() {
  257.         super(newAction);
  258.     }
  259.  
  260.         public void actionPerformed(ActionEvent e) {
  261.         if(getEditor().getDocument() != null)
  262.         getEditor().getDocument().removeUndoableEditListener
  263.                     (Stylepad.this);
  264.         getEditor().setDocument(new DefaultStyledDocument());
  265.         getEditor().getDocument().addUndoableEditListener(Stylepad.this);
  266.         validate();
  267.     }
  268.     }
  269.  
  270.     class ColoredSquare implements Icon {
  271.     Color color;
  272.     public ColoredSquare(Color c) {
  273.         this.color = c;
  274.     }
  275.  
  276.     public void paintIcon(Component c, Graphics g, int x, int y) {
  277.         Color oldColor = g.getColor();
  278.         g.setColor(color);
  279.         g.fill3DRect(x,y,getIconWidth(), getIconHeight(), true);
  280.         g.setColor(oldColor);
  281.     }
  282.     public int getIconWidth() { return 12; }
  283.     public int getIconHeight() { return 12; }
  284.  
  285.     }
  286. }
  287.