8205136: Move StylePad demo to the open repository
Reviewed-by: serb, erikj
@ -264,6 +264,12 @@ $(eval $(call SetupBuildDemo, Notepad, \
|
||||
DEMO_SUBDIR := jfc, \
|
||||
))
|
||||
|
||||
$(eval $(call SetupBuildDemo, Stylepad, \
|
||||
DEMO_SUBDIR := jfc, \
|
||||
EXTRA_SRC_DIR := $(DEMO_SHARE_SRC)/jfc/Notepad, \
|
||||
EXCLUDE_FILES := $(DEMO_SHARE_SRC)/jfc/Notepad/README.txt, \
|
||||
))
|
||||
|
||||
$(eval $(call SetupBuildDemo, SampleTree, \
|
||||
DEMO_SUBDIR := jfc, \
|
||||
))
|
||||
|
208
src/demo/share/jfc/Stylepad/HelloWorld.java
Normal file
@ -0,0 +1,208 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
import java.awt.Color;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.ResourceBundle;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.text.BadLocationException;
|
||||
import javax.swing.text.DefaultStyledDocument;
|
||||
import javax.swing.text.Style;
|
||||
import javax.swing.text.StyleConstants;
|
||||
import javax.swing.text.StyleContext;
|
||||
|
||||
|
||||
/**
|
||||
* hack to load attributed content.
|
||||
*/
|
||||
public class HelloWorld {
|
||||
|
||||
HelloWorld(DefaultStyledDocument doc, StyleContext styles) {
|
||||
this.doc = doc;
|
||||
this.styles = styles;
|
||||
runAttr = new HashMap<String, Style>();
|
||||
}
|
||||
|
||||
void loadDocument() {
|
||||
createStyles();
|
||||
for (int i = 0; i < data.length; i++) {
|
||||
Paragraph p = data[i];
|
||||
addParagraph(p);
|
||||
}
|
||||
}
|
||||
|
||||
void addParagraph(Paragraph p) {
|
||||
try {
|
||||
Style s = null;
|
||||
for (int i = 0; i < p.data.length; i++) {
|
||||
Run run = p.data[i];
|
||||
s = runAttr.get(run.attr);
|
||||
doc.insertString(doc.getLength(), run.content, s);
|
||||
}
|
||||
|
||||
// set logical style
|
||||
Style ls = styles.getStyle(p.logical);
|
||||
doc.setLogicalStyle(doc.getLength() - 1, ls);
|
||||
doc.insertString(doc.getLength(), "\n", null);
|
||||
} catch (BadLocationException e) {
|
||||
System.err.println("Internal error: " + e);
|
||||
}
|
||||
}
|
||||
|
||||
void createStyles() {
|
||||
// no attributes defined
|
||||
Style s = styles.addStyle(null, null);
|
||||
runAttr.put("none", s);
|
||||
s = styles.addStyle(null, null);
|
||||
StyleConstants.setItalic(s, true);
|
||||
StyleConstants.setForeground(s, new Color(153, 153, 102));
|
||||
runAttr.put("cquote", s); // catepillar quote
|
||||
|
||||
s = styles.addStyle(null, null);
|
||||
StyleConstants.setItalic(s, true);
|
||||
StyleConstants.setForeground(s, new Color(51, 102, 153));
|
||||
runAttr.put("aquote", s); // alice quote
|
||||
|
||||
try {
|
||||
ResourceBundle resources = ResourceBundle.getBundle(
|
||||
"resources.Stylepad",
|
||||
Locale.getDefault());
|
||||
s = styles.addStyle(null, null);
|
||||
Icon alice = new ImageIcon(resources.getString("aliceGif"));
|
||||
StyleConstants.setIcon(s, alice);
|
||||
runAttr.put("alice", s); // alice
|
||||
|
||||
s = styles.addStyle(null, null);
|
||||
Icon caterpillar = new ImageIcon(resources.getString(
|
||||
"caterpillarGif"));
|
||||
StyleConstants.setIcon(s, caterpillar);
|
||||
runAttr.put("caterpillar", s); // caterpillar
|
||||
|
||||
s = styles.addStyle(null, null);
|
||||
Icon hatter = new ImageIcon(resources.getString("hatterGif"));
|
||||
StyleConstants.setIcon(s, hatter);
|
||||
runAttr.put("hatter", s); // hatter
|
||||
|
||||
|
||||
} catch (MissingResourceException mre) {
|
||||
// can't display image
|
||||
}
|
||||
|
||||
Style def = styles.getStyle(StyleContext.DEFAULT_STYLE);
|
||||
|
||||
Style heading = styles.addStyle("heading", def);
|
||||
//StyleConstants.setFontFamily(heading, "SansSerif");
|
||||
StyleConstants.setBold(heading, true);
|
||||
StyleConstants.setAlignment(heading, StyleConstants.ALIGN_CENTER);
|
||||
StyleConstants.setSpaceAbove(heading, 10);
|
||||
StyleConstants.setSpaceBelow(heading, 10);
|
||||
StyleConstants.setFontSize(heading, 18);
|
||||
|
||||
// Title
|
||||
Style sty = styles.addStyle("title", heading);
|
||||
StyleConstants.setFontSize(sty, 32);
|
||||
|
||||
// edition
|
||||
sty = styles.addStyle("edition", heading);
|
||||
StyleConstants.setFontSize(sty, 16);
|
||||
|
||||
// author
|
||||
sty = styles.addStyle("author", heading);
|
||||
StyleConstants.setItalic(sty, true);
|
||||
StyleConstants.setSpaceBelow(sty, 25);
|
||||
|
||||
// subtitle
|
||||
sty = styles.addStyle("subtitle", heading);
|
||||
StyleConstants.setSpaceBelow(sty, 35);
|
||||
|
||||
// normal
|
||||
sty = styles.addStyle("normal", def);
|
||||
StyleConstants.setLeftIndent(sty, 10);
|
||||
StyleConstants.setRightIndent(sty, 10);
|
||||
//StyleConstants.setFontFamily(sty, "SansSerif");
|
||||
StyleConstants.setFontSize(sty, 14);
|
||||
StyleConstants.setSpaceAbove(sty, 4);
|
||||
StyleConstants.setSpaceBelow(sty, 4);
|
||||
}
|
||||
DefaultStyledDocument doc;
|
||||
StyleContext styles;
|
||||
HashMap<String, Style> runAttr;
|
||||
|
||||
|
||||
static class Paragraph {
|
||||
|
||||
Paragraph(String logical, Run[] data) {
|
||||
this.logical = logical;
|
||||
this.data = data;
|
||||
}
|
||||
String logical;
|
||||
Run[] data;
|
||||
}
|
||||
|
||||
|
||||
static class Run {
|
||||
|
||||
Run(String attr, String content) {
|
||||
this.attr = attr;
|
||||
this.content = content;
|
||||
}
|
||||
String attr;
|
||||
String content;
|
||||
}
|
||||
Paragraph[] data = new Paragraph[] {
|
||||
new Paragraph("title", new Run[] {
|
||||
new Run("none", "Hello from Cupertino")
|
||||
}),
|
||||
new Paragraph("title", new Run[] {
|
||||
new Run("none", "\u53F0\u5317\u554F\u5019\u60A8\u0021")
|
||||
}),
|
||||
new Paragraph("title", new Run[] {
|
||||
new Run("none", "\u0391\u03B8\u03B7\u03BD\u03B1\u03B9\u0020" // Greek
|
||||
+ "\u03B1\u03C3\u03C0\u03B1\u03B6\u03BF\u03BD"
|
||||
+ "\u03C4\u03B1\u03B9\u0020\u03C5\u03BC\u03B1"
|
||||
+ "\u03C2\u0021")
|
||||
}),
|
||||
new Paragraph("title", new Run[] {
|
||||
new Run("none", "\u6771\u4eac\u304b\u3089\u4eca\u65e5\u306f")
|
||||
}),
|
||||
new Paragraph("title", new Run[] {
|
||||
new Run("none", "\u05e9\u05dc\u05d5\u05dd \u05de\u05d9\u05e8\u05d5"
|
||||
+ "\u05e9\u05dc\u05d9\u05dd")
|
||||
}),
|
||||
new Paragraph("title", new Run[] {
|
||||
new Run("none", "\u0633\u0644\u0627\u0645")
|
||||
}), };
|
||||
}
|
11
src/demo/share/jfc/Stylepad/README.txt
Normal file
@ -0,0 +1,11 @@
|
||||
|
||||
To run the Stylepad demo:
|
||||
|
||||
java -jar Stylepad.jar
|
||||
|
||||
These instructions assume that this installation's version of the java
|
||||
command is in your path. If it isn't, then you should either
|
||||
specify the complete path to the java command or update your
|
||||
PATH environment variable as described in the installation
|
||||
instructions for the Java(TM) SE Development Kit.
|
||||
|
409
src/demo/share/jfc/Stylepad/Stylepad.java
Normal file
@ -0,0 +1,409 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.FileDialog;
|
||||
import java.awt.Frame;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.GraphicsEnvironment;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutput;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.swing.AbstractAction;
|
||||
import javax.swing.Action;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JTextPane;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.text.DefaultStyledDocument;
|
||||
import javax.swing.text.Document;
|
||||
import javax.swing.text.JTextComponent;
|
||||
import javax.swing.text.StyleContext;
|
||||
import javax.swing.text.StyledEditorKit;
|
||||
import javax.swing.text.TextAction;
|
||||
|
||||
|
||||
/**
|
||||
* Sample application using JTextPane.
|
||||
*
|
||||
* @author Timothy Prinzing
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public class Stylepad extends Notepad {
|
||||
|
||||
private static ResourceBundle resources;
|
||||
private FileDialog fileDialog;
|
||||
|
||||
private static final String[] MENUBAR_KEYS = {"file", "edit", "color",
|
||||
"font", "debug"};
|
||||
private static final String[] FONT_KEYS = {"family1", "family2", "family3",
|
||||
"family4", "-", "size1", "size2", "size3", "size4", "size5", "-",
|
||||
"bold", "italic", "underline"};
|
||||
private static final String[] TOOLBAR_KEYS = {"new", "open", "save", "-",
|
||||
"cut", "copy", "paste", "-", "bold", "italic", "underline", "-",
|
||||
"left", "center", "right"};
|
||||
|
||||
|
||||
static {
|
||||
try {
|
||||
properties.load(Stylepad.class.getResourceAsStream(
|
||||
"resources/StylepadSystem.properties"));
|
||||
resources = ResourceBundle.getBundle("resources.Stylepad");
|
||||
} catch (MissingResourceException | IOException mre) {
|
||||
System.err.println("Stylepad.properties or StylepadSystem.properties not found");
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
public Stylepad() {
|
||||
super();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
|
||||
public void run() {
|
||||
JFrame frame = new JFrame();
|
||||
frame.setTitle(resources.getString("Title"));
|
||||
frame.setBackground(Color.lightGray);
|
||||
frame.getContentPane().
|
||||
setLayout(new BorderLayout());
|
||||
Stylepad stylepad = new Stylepad();
|
||||
frame.getContentPane().add("Center", stylepad);
|
||||
frame.setJMenuBar(stylepad.createMenubar());
|
||||
frame.addWindowListener(new AppCloser());
|
||||
frame.pack();
|
||||
frame.setSize(600, 480);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
} catch (InterruptedException ex) {
|
||||
Logger.getLogger(Stylepad.class.getName()).log(Level.SEVERE, null,
|
||||
ex);
|
||||
} catch (InvocationTargetException ex) {
|
||||
Logger.getLogger(Stylepad.class.getName()).log(Level.SEVERE, null,
|
||||
ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch the list of actions supported by this
|
||||
* editor. It is implemented to return the list
|
||||
* of actions supported by the superclass
|
||||
* augmented with the actions defined locally.
|
||||
*/
|
||||
@Override
|
||||
public Action[] getActions() {
|
||||
Action[] defaultActions = {
|
||||
new NewAction(),
|
||||
new OpenAction(),
|
||||
new SaveAction(),
|
||||
new StyledEditorKit.FontFamilyAction("font-family-SansSerif",
|
||||
"SansSerif"), };
|
||||
Action[] a = TextAction.augmentList(super.getActions(), defaultActions);
|
||||
return a;
|
||||
}
|
||||
|
||||
/**
|
||||
* Try and resolve the resource name in the local
|
||||
* resource file, and if not found fall back to
|
||||
* the superclass resource file.
|
||||
*/
|
||||
@Override
|
||||
protected String getResourceString(String nm) {
|
||||
String str;
|
||||
try {
|
||||
str = Stylepad.resources.getString(nm);
|
||||
} catch (MissingResourceException mre) {
|
||||
str = super.getResourceString(nm);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an editor to represent the given document.
|
||||
*/
|
||||
@Override
|
||||
protected JTextComponent createEditor() {
|
||||
StyleContext sc = new StyleContext();
|
||||
DefaultStyledDocument doc = new DefaultStyledDocument(sc);
|
||||
initDocument(doc, sc);
|
||||
JTextPane p = new JTextPane(doc);
|
||||
p.setDragEnabled(true);
|
||||
|
||||
//p.getCaret().setBlinkRate(0);
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a menu for the app. This is redefined to trap
|
||||
* a couple of special entries for now.
|
||||
*/
|
||||
@Override
|
||||
protected JMenu createMenu(String key) {
|
||||
if (key.equals("color")) {
|
||||
return createColorMenu();
|
||||
}
|
||||
return super.createMenu(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] getItemKeys(String key) {
|
||||
switch (key) {
|
||||
case "font":
|
||||
return FONT_KEYS;
|
||||
default:
|
||||
return super.getItemKeys(key);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] getMenuBarKeys() {
|
||||
return MENUBAR_KEYS;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] getToolBarKeys() {
|
||||
return TOOLBAR_KEYS;
|
||||
}
|
||||
|
||||
// this will soon be replaced
|
||||
JMenu createColorMenu() {
|
||||
ActionListener a;
|
||||
JMenuItem mi;
|
||||
JMenu menu = new JMenu(getResourceString("color" + labelSuffix));
|
||||
mi = new JMenuItem(resources.getString("Red"));
|
||||
mi.setHorizontalTextPosition(JButton.RIGHT);
|
||||
mi.setIcon(new ColoredSquare(Color.red));
|
||||
a =
|
||||
new StyledEditorKit.ForegroundAction("set-foreground-red",
|
||||
Color.red);
|
||||
//a = new ColorAction(se, Color.red);
|
||||
mi.addActionListener(a);
|
||||
menu.add(mi);
|
||||
mi = new JMenuItem(resources.getString("Green"));
|
||||
mi.setHorizontalTextPosition(JButton.RIGHT);
|
||||
mi.setIcon(new ColoredSquare(Color.green));
|
||||
a = new StyledEditorKit.ForegroundAction("set-foreground-green",
|
||||
Color.green);
|
||||
//a = new ColorAction(se, Color.green);
|
||||
mi.addActionListener(a);
|
||||
menu.add(mi);
|
||||
mi = new JMenuItem(resources.getString("Blue"));
|
||||
mi.setHorizontalTextPosition(JButton.RIGHT);
|
||||
mi.setIcon(new ColoredSquare(Color.blue));
|
||||
a = new StyledEditorKit.ForegroundAction("set-foreground-blue",
|
||||
Color.blue);
|
||||
//a = new ColorAction(se, Color.blue);
|
||||
mi.addActionListener(a);
|
||||
menu.add(mi);
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
||||
void initDocument(DefaultStyledDocument doc, StyleContext sc) {
|
||||
Wonderland w = new Wonderland(doc, sc);
|
||||
w.loadDocument();
|
||||
}
|
||||
|
||||
JComboBox createFamilyChoices() {
|
||||
JComboBox b = new JComboBox();
|
||||
String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment().
|
||||
getAvailableFontFamilyNames();
|
||||
for (String fontName : fontNames) {
|
||||
b.addItem(fontName);
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Trys to read a file which is assumed to be a
|
||||
* serialization of a document.
|
||||
*/
|
||||
class OpenAction extends AbstractAction {
|
||||
|
||||
OpenAction() {
|
||||
super(openAction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Frame frame = getFrame();
|
||||
if (fileDialog == null) {
|
||||
fileDialog = new FileDialog(frame);
|
||||
}
|
||||
fileDialog.setMode(FileDialog.LOAD);
|
||||
fileDialog.setVisible(true);
|
||||
|
||||
String file = fileDialog.getFile();
|
||||
if (file == null) {
|
||||
return;
|
||||
}
|
||||
String directory = fileDialog.getDirectory();
|
||||
File f = new File(directory, file);
|
||||
if (f.exists()) {
|
||||
try {
|
||||
FileInputStream fin = new FileInputStream(f);
|
||||
ObjectInputStream istrm = new ObjectInputStream(fin);
|
||||
Document doc = (Document) istrm.readObject();
|
||||
if (getEditor().getDocument() != null) {
|
||||
getEditor().getDocument().removeUndoableEditListener(
|
||||
undoHandler);
|
||||
}
|
||||
getEditor().setDocument(doc);
|
||||
doc.addUndoableEditListener(undoHandler);
|
||||
resetUndoManager();
|
||||
frame.setTitle(file);
|
||||
validate();
|
||||
} catch (IOException io) {
|
||||
// should put in status panel
|
||||
System.err.println("IOException: " + io.getMessage());
|
||||
} catch (ClassNotFoundException cnf) {
|
||||
// should put in status panel
|
||||
System.err.println("Class not found: " + cnf.getMessage());
|
||||
}
|
||||
} else {
|
||||
// should put in status panel
|
||||
System.err.println("No such file: " + f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Trys to write the document as a serialization.
|
||||
*/
|
||||
class SaveAction extends AbstractAction {
|
||||
|
||||
SaveAction() {
|
||||
super(saveAction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Frame frame = getFrame();
|
||||
if (fileDialog == null) {
|
||||
fileDialog = new FileDialog(frame);
|
||||
}
|
||||
fileDialog.setMode(FileDialog.SAVE);
|
||||
fileDialog.setVisible(true);
|
||||
String file = fileDialog.getFile();
|
||||
if (file == null) {
|
||||
return;
|
||||
}
|
||||
String directory = fileDialog.getDirectory();
|
||||
File f = new File(directory, file);
|
||||
try {
|
||||
FileOutputStream fstrm = new FileOutputStream(f);
|
||||
ObjectOutput ostrm = new ObjectOutputStream(fstrm);
|
||||
ostrm.writeObject(getEditor().getDocument());
|
||||
ostrm.flush();
|
||||
frame.setTitle(f.getName());
|
||||
} catch (IOException io) {
|
||||
// should put in status panel
|
||||
System.err.println("IOException: " + io.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates an empty document.
|
||||
*/
|
||||
class NewAction extends AbstractAction {
|
||||
|
||||
NewAction() {
|
||||
super(newAction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (getEditor().getDocument() != null) {
|
||||
getEditor().getDocument().removeUndoableEditListener(undoHandler);
|
||||
}
|
||||
getEditor().setDocument(new DefaultStyledDocument());
|
||||
getEditor().getDocument().addUndoableEditListener(undoHandler);
|
||||
resetUndoManager();
|
||||
getFrame().setTitle(resources.getString("Title"));
|
||||
validate();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class ColoredSquare implements Icon {
|
||||
|
||||
Color color;
|
||||
|
||||
public ColoredSquare(Color c) {
|
||||
this.color = c;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paintIcon(Component c, Graphics g, int x, int y) {
|
||||
Color oldColor = g.getColor();
|
||||
g.setColor(color);
|
||||
g.fill3DRect(x, y, getIconWidth(), getIconHeight(), true);
|
||||
g.setColor(oldColor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIconWidth() {
|
||||
return 12;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIconHeight() {
|
||||
return 12;
|
||||
}
|
||||
}
|
||||
}
|
299
src/demo/share/jfc/Stylepad/Wonderland.java
Normal file
@ -0,0 +1,299 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
import java.awt.Color;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.ResourceBundle;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.text.BadLocationException;
|
||||
import javax.swing.text.DefaultStyledDocument;
|
||||
import javax.swing.text.Style;
|
||||
import javax.swing.text.StyleConstants;
|
||||
import javax.swing.text.StyleContext;
|
||||
|
||||
|
||||
/**
|
||||
* hack to load attributed content
|
||||
*/
|
||||
public class Wonderland {
|
||||
|
||||
Wonderland(DefaultStyledDocument doc, StyleContext styles) {
|
||||
this.doc = doc;
|
||||
this.styles = styles;
|
||||
runAttr = new HashMap<String, Style>();
|
||||
}
|
||||
|
||||
void loadDocument() {
|
||||
createStyles();
|
||||
for (int i = 0; i < data.length; i++) {
|
||||
Paragraph p = data[i];
|
||||
addParagraph(p);
|
||||
}
|
||||
}
|
||||
|
||||
void addParagraph(Paragraph p) {
|
||||
try {
|
||||
Style s = null;
|
||||
for (int i = 0; i < p.data.length; i++) {
|
||||
Run run = p.data[i];
|
||||
s = runAttr.get(run.attr);
|
||||
doc.insertString(doc.getLength(), run.content, s);
|
||||
}
|
||||
|
||||
// set logical style
|
||||
Style ls = styles.getStyle(p.logical);
|
||||
doc.setLogicalStyle(doc.getLength() - 1, ls);
|
||||
doc.insertString(doc.getLength(), "\n", null);
|
||||
} catch (BadLocationException e) {
|
||||
System.err.println("Internal error: " + e);
|
||||
}
|
||||
}
|
||||
|
||||
void createStyles() {
|
||||
// no attributes defined
|
||||
Style s = styles.addStyle(null, null);
|
||||
runAttr.put("none", s);
|
||||
s = styles.addStyle(null, null);
|
||||
StyleConstants.setItalic(s, true);
|
||||
StyleConstants.setForeground(s, new Color(153, 153, 102));
|
||||
runAttr.put("cquote", s); // catepillar quote
|
||||
|
||||
s = styles.addStyle(null, null);
|
||||
StyleConstants.setItalic(s, true);
|
||||
StyleConstants.setForeground(s, new Color(51, 102, 153));
|
||||
runAttr.put("aquote", s); // alice quote
|
||||
|
||||
try {
|
||||
ResourceBundle resources = ResourceBundle.getBundle(
|
||||
"resources.Stylepad",
|
||||
Locale.getDefault());
|
||||
s = styles.addStyle(null, null);
|
||||
Icon alice =
|
||||
new ImageIcon(getClass().
|
||||
getResource(resources.getString("aliceGif")));
|
||||
StyleConstants.setIcon(s, alice);
|
||||
runAttr.put("alice", s); // alice
|
||||
|
||||
s = styles.addStyle(null, null);
|
||||
Icon caterpillar =
|
||||
new ImageIcon(getClass().
|
||||
getResource(resources.getString("caterpillarGif")));
|
||||
StyleConstants.setIcon(s, caterpillar);
|
||||
runAttr.put("caterpillar", s); // caterpillar
|
||||
|
||||
s = styles.addStyle(null, null);
|
||||
Icon hatter =
|
||||
new ImageIcon(getClass().
|
||||
getResource(resources.getString("hatterGif")));
|
||||
StyleConstants.setIcon(s, hatter);
|
||||
runAttr.put("hatter", s); // hatter
|
||||
|
||||
|
||||
} catch (MissingResourceException mre) {
|
||||
// can't display image
|
||||
}
|
||||
|
||||
Style def = styles.getStyle(StyleContext.DEFAULT_STYLE);
|
||||
|
||||
Style heading = styles.addStyle("heading", def);
|
||||
StyleConstants.setFontFamily(heading, "SansSerif");
|
||||
StyleConstants.setBold(heading, true);
|
||||
StyleConstants.setAlignment(heading, StyleConstants.ALIGN_CENTER);
|
||||
StyleConstants.setSpaceAbove(heading, 10);
|
||||
StyleConstants.setSpaceBelow(heading, 10);
|
||||
StyleConstants.setFontSize(heading, 18);
|
||||
|
||||
// Title
|
||||
Style sty = styles.addStyle("title", heading);
|
||||
StyleConstants.setFontSize(sty, 32);
|
||||
|
||||
// edition
|
||||
sty = styles.addStyle("edition", heading);
|
||||
StyleConstants.setFontSize(sty, 16);
|
||||
|
||||
// author
|
||||
sty = styles.addStyle("author", heading);
|
||||
StyleConstants.setItalic(sty, true);
|
||||
StyleConstants.setSpaceBelow(sty, 25);
|
||||
|
||||
// subtitle
|
||||
sty = styles.addStyle("subtitle", heading);
|
||||
StyleConstants.setSpaceBelow(sty, 35);
|
||||
|
||||
// normal
|
||||
sty = styles.addStyle("normal", def);
|
||||
StyleConstants.setLeftIndent(sty, 10);
|
||||
StyleConstants.setRightIndent(sty, 10);
|
||||
StyleConstants.setFontFamily(sty, "SansSerif");
|
||||
StyleConstants.setFontSize(sty, 14);
|
||||
StyleConstants.setSpaceAbove(sty, 4);
|
||||
StyleConstants.setSpaceBelow(sty, 4);
|
||||
}
|
||||
DefaultStyledDocument doc;
|
||||
StyleContext styles;
|
||||
HashMap<String, Style> runAttr;
|
||||
|
||||
|
||||
static class Paragraph {
|
||||
|
||||
Paragraph(String logical, Run[] data) {
|
||||
this.logical = logical;
|
||||
this.data = data;
|
||||
}
|
||||
String logical;
|
||||
Run[] data;
|
||||
}
|
||||
|
||||
|
||||
static class Run {
|
||||
|
||||
Run(String attr, String content) {
|
||||
this.attr = attr;
|
||||
this.content = content;
|
||||
}
|
||||
String attr;
|
||||
String content;
|
||||
}
|
||||
Paragraph[] data = new Paragraph[] {
|
||||
new Paragraph("title", new Run[] {
|
||||
new Run("none", "ALICE'S ADVENTURES IN WONDERLAND")
|
||||
}),
|
||||
new Paragraph("author", new Run[] {
|
||||
new Run("none", "Lewis Carroll")
|
||||
}),
|
||||
new Paragraph("heading", new Run[] {
|
||||
new Run("alice", " ")
|
||||
}),
|
||||
new Paragraph("edition", new Run[] {
|
||||
new Run("none", "THE MILLENNIUM FULCRUM EDITION 3.0")
|
||||
}),
|
||||
new Paragraph("heading", new Run[] {
|
||||
new Run("none", "CHAPTER V")
|
||||
}),
|
||||
new Paragraph("subtitle", new Run[] {
|
||||
new Run("none", "Advice from a Caterpillar")
|
||||
}),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("none", " "), }),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("none",
|
||||
"The Caterpillar and Alice looked at each other for some time in "
|
||||
+ "silence: at last the Caterpillar took the hookah out "
|
||||
+ "of its mouth, and addressed her in a languid, sleepy "
|
||||
+ "voice.")
|
||||
}),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("cquote", "Who are YOU? "),
|
||||
new Run("none", "said the Caterpillar.")
|
||||
}),
|
||||
new Paragraph("normal",
|
||||
new Run[] {
|
||||
new Run("none",
|
||||
"This was not an encouraging opening for a conversation. Alice "
|
||||
+ "replied, rather shyly, "),
|
||||
new Run("aquote",
|
||||
"I--I hardly know, sir, just at present--at least I know who I WAS "
|
||||
+ "when I got up this morning, but I think I must have "
|
||||
+ "been changed several times since then. "), }),
|
||||
new Paragraph("heading", new Run[] {
|
||||
new Run("caterpillar", " ")
|
||||
}),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("cquote", "What do you mean by that? "),
|
||||
new Run("none", " said the Caterpillar sternly. "),
|
||||
new Run("cquote", "Explain yourself!"), }),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("aquote", "I can't explain MYSELF, I'm afraid, sir"),
|
||||
new Run("none", " said Alice, "),
|
||||
new Run("aquote", "because I'm not myself, you see."), }),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("cquote", "I don't see,"),
|
||||
new Run("none", " said the Caterpillar."), }),
|
||||
new Paragraph("normal",
|
||||
new Run[] {
|
||||
new Run("aquote", "I'm afraid I can't put it more clearly, "),
|
||||
new Run("none", "Alice replied very politely, "),
|
||||
new Run("aquote",
|
||||
"for I can't understand it myself to begin with; and being so many "
|
||||
+ "different sizes in a day is very confusing."), }),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("cquote", "It isn't, "),
|
||||
new Run("none", "said the Caterpillar.")
|
||||
}),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("aquote", "Well, perhaps you haven't found it so yet,"),
|
||||
new Run("none", " said Alice; "),
|
||||
new Run("aquote",
|
||||
"but when you have to turn into a chrysalis--you will some day, "
|
||||
+ "you know--and then after that into a butterfly, I "
|
||||
+ "should think you'll feel it a little queer, won't you?")
|
||||
}),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("cquote", "Not a bit, "),
|
||||
new Run("none", "said the Caterpillar.")
|
||||
}),
|
||||
new Paragraph("normal",
|
||||
new Run[] {
|
||||
new Run("aquote", "Well, perhaps your feelings may be different,"),
|
||||
new Run("none", " said Alice; "),
|
||||
new Run("aquote", "all I know is, it would feel very queer to ME."),
|
||||
}),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("cquote", "You!"),
|
||||
new Run("none", " said the Caterpillar contemptuously. "),
|
||||
new Run("cquote", "Who are YOU?"), }),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("normal",
|
||||
"Which brought them back again to the beginning of the "
|
||||
+ "conversation. Alice felt a little irritated at the "
|
||||
+ "Caterpillar's making such VERY short remarks, and she "
|
||||
+ "drew herself up and said, very gravely, "),
|
||||
new Run("aquote",
|
||||
"I think, you ought to tell me who YOU are, first."), }),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("cquote", "Why? "),
|
||||
new Run("none", "said the Caterpillar."), }),
|
||||
new Paragraph("heading", new Run[] {
|
||||
new Run("hatter", " ")
|
||||
}),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("none", " "), }),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("none", " "), }),
|
||||
new Paragraph("normal", new Run[] {
|
||||
new Run("none", " "), })
|
||||
};
|
||||
}
|
58
src/demo/share/jfc/Stylepad/resources/Stylepad.properties
Normal file
@ -0,0 +1,58 @@
|
||||
#
|
||||
# Resource strings for Stylepad example
|
||||
|
||||
Title=Stylepad
|
||||
|
||||
# Menu labels
|
||||
colorLabel=Color
|
||||
Red=Red
|
||||
Green=Green
|
||||
Blue=Blue
|
||||
|
||||
boldLabel=Bold
|
||||
italicLabel=Italic
|
||||
|
||||
# font menu
|
||||
|
||||
fontLabel=Font
|
||||
family1Label=SansSerif
|
||||
family2Label=Monospaced
|
||||
family3Label=Serif
|
||||
family4Label=Lucida Sans
|
||||
size1Label=10
|
||||
size2Label=12
|
||||
size3Label=18
|
||||
size4Label=24
|
||||
size5Label=48
|
||||
boldLabel=Bold
|
||||
italicLabel=Italic
|
||||
underlineLabel=Underline
|
||||
|
||||
#
|
||||
# debug Menu definition
|
||||
#
|
||||
debugLabel=Debug
|
||||
dumpLabel=Dump model to System.err
|
||||
showElementTreeLabel=Show Elements
|
||||
|
||||
|
||||
# toolbar definition
|
||||
boldImage=resources/bold.gif
|
||||
boldTooltip=Bold
|
||||
italicImage=resources/italic.gif
|
||||
italicTooltip=Italic
|
||||
underlineImage=resources/underline.gif
|
||||
underlineTooltip=Underline
|
||||
foregroundImage=resources/fg.gif
|
||||
leftImage=resources/left.gif
|
||||
leftTooltip=Left Justify
|
||||
centerImage=resources/center.gif
|
||||
centerTooltip=Center Justify
|
||||
rightImage=resources/right.gif
|
||||
rightTooltip=Right Justify
|
||||
bulletsImage=resources/bullets.gif
|
||||
|
||||
# wonderland example images
|
||||
aliceGif=resources/alice.gif
|
||||
caterpillarGif=resources/caterpillar.gif
|
||||
hatterGif=resources/hatter.gif
|
@ -0,0 +1,23 @@
|
||||
#
|
||||
# Non-translatable properties for Stylepad example
|
||||
|
||||
ViewportBackingStore=true
|
||||
|
||||
family1Action=font-family-SansSerif
|
||||
family2Action=font-family-Monospaced
|
||||
family3Action=font-family-Serif
|
||||
family4Action=font-family-LucidaSans
|
||||
size1Action=font-size-10
|
||||
size2Action=font-size-12
|
||||
size3Action=font-size-18
|
||||
size4Action=font-size-24
|
||||
size5Action=font-size-48
|
||||
boldAction=font-bold
|
||||
italicAction=font-italic
|
||||
underlineAction=font-underline
|
||||
|
||||
dumpAction=dump-model
|
||||
|
||||
leftAction=left-justify
|
||||
centerAction=center-justify
|
||||
rightAction=right-justify
|
58
src/demo/share/jfc/Stylepad/resources/Stylepad_ja.properties
Normal file
@ -0,0 +1,58 @@
|
||||
#
|
||||
# Resource strings for Stylepad example
|
||||
|
||||
Title=\u30B9\u30BF\u30A4\u30EB\u30D1\u30C3\u30C9
|
||||
|
||||
# Menu labels
|
||||
colorLabel=\u30AB\u30E9\u30FC
|
||||
Red=\u8D64
|
||||
Green=\u7DD1
|
||||
Blue=\u9752
|
||||
|
||||
boldLabel=\u592A\u5B57
|
||||
italicLabel=\u30A4\u30BF\u30EA\u30C3\u30AF
|
||||
|
||||
# font menu
|
||||
|
||||
fontLabel=\u30D5\u30A9\u30F3\u30C8
|
||||
family1Label=SansSerif
|
||||
family2Label=\u30E2\u30CE\u30B9\u30DA\u30FC\u30B9
|
||||
family3Label=Serif
|
||||
family4Label=Lucida Sans
|
||||
size1Label=10
|
||||
size2Label=12
|
||||
size3Label=18
|
||||
size4Label=24
|
||||
size5Label=48
|
||||
boldLabel=\u592A\u5B57
|
||||
italicLabel=\u30A4\u30BF\u30EA\u30C3\u30AF
|
||||
underlineLabel=\u4E0B\u7DDA
|
||||
|
||||
#
|
||||
# debug Menu definition
|
||||
#
|
||||
debugLabel=\u30C7\u30D0\u30C3\u30B0
|
||||
dumpLabel=\u30E2\u30C7\u30EB\u3092System.err\u306B\u30C0\u30F3\u30D7
|
||||
showElementTreeLabel=\u8981\u7D20\u306E\u8868\u793A
|
||||
|
||||
|
||||
# toolbar definition
|
||||
boldImage=resources/bold.gif
|
||||
boldTooltip=\u592A\u5B57
|
||||
italicImage=resources/italic.gif
|
||||
italicTooltip=\u30A4\u30BF\u30EA\u30C3\u30AF
|
||||
underlineImage=resources/underline.gif
|
||||
underlineTooltip=\u4E0B\u7DDA
|
||||
foregroundImage=resources/fg.gif
|
||||
leftImage=resources/left.gif
|
||||
leftTooltip=\u5DE6\u63C3\u3048
|
||||
centerImage=resources/center.gif
|
||||
centerTooltip=\u4E2D\u592E\u63C3\u3048
|
||||
rightImage=resources/right.gif
|
||||
rightTooltip=\u53F3\u63C3\u3048
|
||||
bulletsImage=resources/bullets.gif
|
||||
|
||||
# wonderland example images
|
||||
aliceGif=resources/alice.gif
|
||||
caterpillarGif=resources/caterpillar.gif
|
||||
hatterGif=resources/hatter.gif
|
@ -0,0 +1,58 @@
|
||||
#
|
||||
# Resource strings for Stylepad example
|
||||
|
||||
Title=StylePad
|
||||
|
||||
# Menu labels
|
||||
colorLabel=\u989C\u8272
|
||||
Red=\u7EA2\u8272
|
||||
Green=\u7EFF\u8272
|
||||
Blue=\u84DD\u8272
|
||||
|
||||
boldLabel=\u7C97\u4F53
|
||||
italicLabel=\u659C\u4F53
|
||||
|
||||
# font menu
|
||||
|
||||
fontLabel=\u5B57\u4F53
|
||||
family1Label=SansSerif
|
||||
family2Label=Monospaced
|
||||
family3Label=Serif
|
||||
family4Label=Lucida Sans
|
||||
size1Label=10
|
||||
size2Label=12
|
||||
size3Label=18
|
||||
size4Label=24
|
||||
size5Label=48
|
||||
boldLabel=\u7C97\u4F53
|
||||
italicLabel=\u659C\u4F53
|
||||
underlineLabel=\u4E0B\u5212\u7EBF
|
||||
|
||||
#
|
||||
# debug Menu definition
|
||||
#
|
||||
debugLabel=\u8C03\u8BD5
|
||||
dumpLabel=\u5C06\u6A21\u578B\u8F6C\u50A8\u5230 System.err
|
||||
showElementTreeLabel=\u663E\u793A\u5143\u7D20
|
||||
|
||||
|
||||
# toolbar definition
|
||||
boldImage=resources/bold.gif
|
||||
boldTooltip=\u7C97\u4F53
|
||||
italicImage=resources/italic.gif
|
||||
italicTooltip=\u659C\u4F53
|
||||
underlineImage=resources/underline.gif
|
||||
underlineTooltip=\u4E0B\u5212\u7EBF
|
||||
foregroundImage=resources/fg.gif
|
||||
leftImage=resources/left.gif
|
||||
leftTooltip=\u5DE6\u5BF9\u9F50
|
||||
centerImage=resources/center.gif
|
||||
centerTooltip=\u4E2D\u95F4\u5BF9\u9F50
|
||||
rightImage=resources/right.gif
|
||||
rightTooltip=\u53F3\u5BF9\u9F50
|
||||
bulletsImage=resources/bullets.gif
|
||||
|
||||
# wonderland example images
|
||||
aliceGif=resources/alice.gif
|
||||
caterpillarGif=resources/caterpillar.gif
|
||||
hatterGif=resources/hatter.gif
|
BIN
src/demo/share/jfc/Stylepad/resources/alice.gif
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
src/demo/share/jfc/Stylepad/resources/bold.gif
Normal file
After Width: | Height: | Size: 105 B |
BIN
src/demo/share/jfc/Stylepad/resources/bullets.gif
Normal file
After Width: | Height: | Size: 118 B |
BIN
src/demo/share/jfc/Stylepad/resources/caterpillar.gif
Normal file
After Width: | Height: | Size: 9.2 KiB |
BIN
src/demo/share/jfc/Stylepad/resources/center.gif
Normal file
After Width: | Height: | Size: 96 B |
BIN
src/demo/share/jfc/Stylepad/resources/fg.gif
Normal file
After Width: | Height: | Size: 185 B |
BIN
src/demo/share/jfc/Stylepad/resources/hatter.gif
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
src/demo/share/jfc/Stylepad/resources/italic.gif
Normal file
After Width: | Height: | Size: 97 B |
BIN
src/demo/share/jfc/Stylepad/resources/left.gif
Normal file
After Width: | Height: | Size: 95 B |
BIN
src/demo/share/jfc/Stylepad/resources/rabbit.gif
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
src/demo/share/jfc/Stylepad/resources/rabbit2.gif
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
src/demo/share/jfc/Stylepad/resources/right.gif
Normal file
After Width: | Height: | Size: 95 B |
BIN
src/demo/share/jfc/Stylepad/resources/underline.gif
Normal file
After Width: | Height: | Size: 110 B |