* Copyright (c) 2005 Ephox Corporation.
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.ephox.editlive.*;
import javax.jnlp.*;
/**  This tutorial shows developers how to specify the encoding for instances of EditLive! for Java Swing
 *        and how to use several instances of EditLive! for Java Swing in the one JFrame.
public class CharEncoding extends JFrame implements ActionListener {
       /**        Buttons used to get html contents of EditLive! and copy to JTextArea source */
       private JButton body1Button = new JButton("Get <BODY> for the above instance of EditLive!");
       private JButton body2Button = new JButton("Get <BODY> for the above instance of EditLive!");
       /** Allows users to enter html content to insert into EditLive!, or holds a copy of the html contents of EditLive! */
       private JTextArea source = new JTextArea(10, 30);
       /** html content to appear in the instance of EditLive! */
       private static final String INITIAL_HTML1 = "<p>Original <i>HTML</i> loaded into EditLive! Instance 1</p><p>Text with &#8220;Smart Quotes&#8221;</p>";
       private static final String INITIAL_HTML2 = "<p>Original <i>HTML</i> loaded into EditLive! Instance 2</p><p>Text with &#8220;Smart Quotes&#8221;</p>";
       /** Base class for EditLive! */
       private ELJBean editLiveBean1 = new ELJBean(INITIAL_HTML1, "", 600, 300, getClass().getResource("charEncoding.xml"), false);
       private ELJBean editLiveBean2 = new ELJBean(INITIAL_HTML2, "", 600, 300, getClass().getResource("charEncoding.xml"), false);
       /** Creates JFrame and adds all class properties. Adds action listener to JButtons in JFrame
       public CharEncoding() throws Exception {
               super("Tutorial - Specifying the Character Encoding");
               SwingUtilities.invokeAndWait(new Runnable() {
                       public void run() {
                               // initialize EditLive! instances
                               // Setting the output character set to use 'ASCII' encoding.
                               // If the setOutoutCharset property is not specified, the default encoding
                               // for character output is 'UTF-8'.                                
               // Setting overall layout for frame
               this.getContentPane().setLayout(new GridLayout(2, 1));
               // Creating panel for two EditLive! instances.
               JPanel multiEditorHolder = new JPanel(new GridLayout(1, 2));
               // Create a JPanel to hold the ELJBean
               JPanel editorHolder1 = new JPanel(new FlowLayout());
               // Add the JPanel to the JFrame
               // Create a JPanel to hold the ELJBean
               JPanel editorHolder2 = new JPanel(new FlowLayout());
               // Add the JPanel to the JFrame
               // Create a JPanel to hold the buttons and the text area
               JPanel buttonsAndText = new JPanel(new BorderLayout());
               // Creating a panel for the two buttons
               JPanel buttonsPanel = new JPanel(new GridLayout(1, 2));
               // add listener to button
               // add listener to button
               // add button holding panel
               buttonsAndText.add(buttonsPanel, BorderLayout.NORTH);
               // specify textarea content
               source.setText("Pressing the above button will copy the contents of the <BODY> attribute in EditLive! into this textarea.");
               // create scrollable pane to hold text area
               JScrollPane textAreaHolder = new JScrollPane(source);
               // add button and textarea to frame
               this.getContentPane().add(buttonsAndText, BorderLayout.CENTER);
               // Display the JFrame.
               this.setSize(new Dimension(1210, 640));
               // Adding a listener to detect if the JFrame is closing, to close the application if needed.
               addWindowListener(new WindowAdapter() {
                       public void windowClosing(WindowEvent e) {
       /** ActionListener for JButtons on the JFrame
        * @param e ActionEvent sent by JButton
       public void actionPerformed(final ActionEvent e) {
               try {
                       SwingUtilities.invokeAndWait(new Runnable() {
                               public void run() {
                                       if (e.getSource() == body1Button) {
                                       if (e.getSource() == body2Button) {
               } catch (Exception exception) {
       /** Sets up the application and begins its execution
        * @param args the command line arguments - ignored
       public static void main(String args[]) throws Exception {
               try {
               } catch(Exception e) {
                       System.out.println("Unable to locate UIManager class");
               new CharEncoding();