/* * $Id$ * * Copyright 2009 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ package org.jdesktop.swingx.demos.xeditorpane; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.io.IOException; import java.net.URL; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JToggleButton; import javax.swing.JToolBar; import javax.swing.SwingUtilities; import org.jdesktop.application.Application; import org.jdesktop.application.ApplicationActionMap; import org.jdesktop.swingx.JXEditorPane; import org.jdesktop.swingx.appframework.StyledTextActions; import com.sun.swingset3.DemoProperties; /** * A demo for the {@code JXEditorPane}. * * @author Karl George Schaefer * @author Mark Davidson (original JXEditorPaneVisualCheck) */ @DemoProperties( value = "JXEditorPane Demo", category = "Text", description = "Demonstrates JXEditorPane, an extended text editing component", sourceFiles = { "org/jdesktop/swingx/demos/xeditorpane/XEditorPaneDemo.java", "org/jdesktop/swingx/demos/xeditorpane/resources/XEditorPaneDemo.properties", "org/jdesktop/swingx/demos/xeditorpane/resources/XEditorPaneDemo.html" } ) @SuppressWarnings("serial") //@ProxyActions({"bold", "italic", "underline"}) public class XEditorPaneDemo extends JPanel { private JToolBar toolbar; private JXEditorPane editor; private ApplicationActionMap map; /** * main method allows us to run as a standalone demo. */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { StyledTextActions.install(Application.getInstance().getContext()); JFrame frame = new JFrame(XEditorPaneDemo.class.getAnnotation(DemoProperties.class).value()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new XEditorPaneDemo()); frame.setPreferredSize(new Dimension(800, 600)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public XEditorPaneDemo() { super(new BorderLayout()); createXEditorPaneDemo(); Application.getInstance().getContext().getResourceMap(getClass()).injectComponents(this); bind(); } private void createXEditorPaneDemo() { //PENDING hack around AppFramework bug #92 toolbar = new JToolBar() { @Override protected void addImpl(Component comp, Object constraints, int index) { comp.setFocusable(false); super.addImpl(comp, constraints, index); } }; add(toolbar, BorderLayout.NORTH); URL url = XEditorPaneDemo.class.getResource("resources/Bike.html"); editor = null; try { editor = new JXEditorPane(url); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // editor.setEditable(false); editor.setPreferredSize(new Dimension(600, 400)); // toolbar.add(editor.getParagraphSelector()); add(new JScrollPane(editor)); } private void bind() { map = Application.getInstance().getContext().getActionMap(this); toolbar.add(map.get("cut")); toolbar.add(map.get("copy")); toolbar.add(map.get("paste")); toolbar.addSeparator(); //TODO doesn't work this way because the action is uninstalled and reinstalled every call // toolbar.add(editor.getActionMap().get("undo")); // toolbar.add(editor.getActionMap().get("redo")); toolbar.addSeparator(); toolbar.add(new JToggleButton(map.get("bold"))); toolbar.add(new JToggleButton(map.get("italic"))); toolbar.add(new JToggleButton(map.get("underline"))); toolbar.add(editor.getParagraphSelector()); //TODO this is the "SwingX" way to do proxy style actions. // //AbstractActionExt[] actions = new AbstractActionExt[14]; // List<AbstractActionExt> actions = new ArrayList<AbstractActionExt>(); // actions.add(ActionFactory.createTargetableAction("insert-break", "LF", "F")); // // actions.add(ActionFactory.createTargetableAction("left-justify", "Left", "L", true, // "position-group")); // actions.add(ActionFactory.createTargetableAction("center-justify", "Center", "C", true, // "position-group")); // actions.add(ActionFactory.createTargetableAction("right-justify", "Right", "R", true, // "position-group")); // // actions.add(ActionFactory.createTargetableAction("font-bold", "Bold", "B", true)); // actions.add(ActionFactory.createTargetableAction("font-italic", "Italic", "I", true)); // actions.add(ActionFactory.createTargetableAction("font-underline", "Underline", "U", true)); // // actions.add(ActionFactory.createTargetableAction("InsertUnorderedList", "UL", "U", true)); // actions.add(ActionFactory.createTargetableAction("InsertOrderedList", "OL", "O", true)); // actions.add(ActionFactory.createTargetableAction("InsertHR", "HR", "H")); // ActionManager manager = ActionManager.getInstance(); // // List<Object> actionNames = new ArrayList<Object>(); // for (AbstractActionExt ext : actions) { // manager.addAction(ext); // actionNames.add(ext.getActionCommand()); // // } // // // Populate the toolbar. Must use the ActionContainerFactory to ensure // // that toggle actions are supported. // ActionContainerFactory factory = new ActionContainerFactory(manager); // // toolbar = factory.createToolBar(actionNames); // add(toolbar, BorderLayout.NORTH); } }