diff options
author | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2006-03-25 12:13:34 +0000 |
---|---|---|
committer | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2006-03-25 12:13:34 +0000 |
commit | 00646e8967de67a315f212dab4199f487064474c (patch) | |
tree | 673ddd9e0b3f2c671e6f86300cdbbd29ca9536fa | |
parent | 7618309d30dd47b0d2aee1a6e2468b1b0f435bb9 (diff) | |
download | classpath-00646e8967de67a315f212dab4199f487064474c.tar.gz |
2006-03-06 Robert Schuster <robertschuster@fsfe.org>
* examples/gnu/classpath/examples/swing/TextArea.java: New file.
-rw-r--r-- | examples/gnu/classpath/examples/swing/TextAreaDemo.java | 606 |
1 files changed, 606 insertions, 0 deletions
diff --git a/examples/gnu/classpath/examples/swing/TextAreaDemo.java b/examples/gnu/classpath/examples/swing/TextAreaDemo.java new file mode 100644 index 000000000..9b4263194 --- /dev/null +++ b/examples/gnu/classpath/examples/swing/TextAreaDemo.java @@ -0,0 +1,606 @@ +/* TextAreaDemo.java -- An example showing various textareas in Swing. + Copyright (C) 2005, 2006, Free Software Foundation, Inc. + + This file is part of GNU Classpath examples. + + GNU Classpath is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU Classpath 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 + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU Classpath; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301 USA. + */ + + +package gnu.classpath.examples.swing; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.GridLayout; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Shape; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTabbedPane; +import javax.swing.JTextArea; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultCaret; +import javax.swing.text.Highlighter; +import javax.swing.text.JTextComponent; +import javax.swing.text.View; +import javax.swing.text.LayeredHighlighter.LayerPainter; + +/** + * A simple textare demo showing various textareas in different states. + */ +public class TextAreaDemo + extends JFrame + implements ActionListener +{ + + /** + * A custom caret for demonstration purposes. This class is inspired by the + * CornerCaret from the OReilly Swing book. + * + * @author Roman Kennke (kennke@aicas.com) + */ + static class CornerCaret + extends DefaultCaret + { + public CornerCaret() + { + super(); + setBlinkRate(500); + } + + protected synchronized void damage(Rectangle r) + { + if (r == null) + return; + x = r.x; + y = r.y + (r.height * 4 / 5 - 3); + width = 5; + height = 5; + repaint(); + } + + public void paint(Graphics g) + { + JTextComponent comp = getComponent(); + if (comp == null) + return; + int dot = getDot(); + Rectangle r = null; + try + { + r = comp.modelToView(dot); + } + catch (BadLocationException e) + { + return; + } + if (r == null) + return; + int dist = r.height * 4 / 5 - 3; + if ((x != r.x) || (y != r.y + dist)) + { + repaint(); + x = r.x; + y = r.y + dist; + width = 5; + height = 5; + } + if (isVisible()) + { + g.drawLine(r.x, r.y + dist, r.x, r.y + dist + 4); + g.drawLine(r.x, r.y + dist + 4, r.x + 4, r.y + dist + 4); + } + } + } + + static class DemoHighlightPainter + extends LayerPainter + { + static DemoHighlightPainter INSTANCE = new DemoHighlightPainter(); + + static Color[] colors = { Color.BLUE, Color.CYAN, Color.GRAY, Color.GREEN, + Color.MAGENTA, Color.ORANGE, Color.PINK, + Color.ORANGE, Color.RED, Color.BLUE, Color.YELLOW }; + + public DemoHighlightPainter() + { + super(); + } + + private void paintHighlight(Graphics g, Rectangle rect) + { + g.fillRect(rect.x, rect.y, rect.width, rect.height); + } + + public void paint(Graphics g, int p0, int p1, Shape bounds, JTextComponent t) + { + try + { + + for (int i = p0; i < p1; i++) + { + Rectangle r = t.modelToView(i); + Point l1 = t.modelToView(i + 1).getLocation(); + + g.setColor(colors[(int) (Math.random() * colors.length)]); + g.fillOval(r.x, r.y, l1.x - r.x, r.height); + } + } + catch (BadLocationException ble) + { + } + + } + + public Shape paintLayer(Graphics g, int p0, int p1, Shape bounds, + JTextComponent c, View view) + { + paint(g, p0, p1, bounds, c); + + return bounds; + } + } + + private JPanel content; + + /** + * The non wrapping text areas and state buttons. + */ + JTextArea textarea1; + + JTextArea textarea2; + + JTextArea textarea3; + + JCheckBox enabled1; + + JCheckBox editable1; + + JPanel panel1; + + /** + * The char wrapping textareas and state buttons. + */ + JTextArea textarea4; + + JTextArea textarea5; + + JTextArea textarea6; + + JCheckBox enabled2; + + JCheckBox editable2; + + /** + * The word wrapping textareas and state buttons. + */ + JTextArea textarea7; + + JTextArea textarea8; + + JTextArea textarea9; + + JCheckBox enabled3; + + JCheckBox editable3; + + /** + * The custom colored textareas and state buttons. + */ + JTextArea textarea10; + + JTextArea textarea11; + + JTextArea textarea12; + + JTextArea textarea13; + + JTextArea textarea14; + + JTextArea textarea14b; + + JCheckBox enabled4; + + JCheckBox editable4; + + /** + * Some miscellaneous textarea demos. + */ + JTextArea textarea15; + + JTextArea textarea16; + + JTextArea textarea17; + + JCheckBox enabled5; + + JCheckBox editable5; + + /** + * Creates a new demo instance. + * + * @param title the frame title. + */ + public TextAreaDemo(String title) + { + super(title); + JPanel content = createContent(); + // initFrameContent() is only called (from main) when running this app + // standalone + } + + /** + * When the demo is run independently, the frame is displayed, so we should + * initialise the content panel (including the demo content and a close + * button). But when the demo is run as part of the Swing activity board, only + * the demo content panel is used, the frame itself is never displayed, so we + * can avoid this step. + */ + public void initFrameContent() + { + JPanel closePanel = new JPanel(); + JButton closeButton = new JButton("Close"); + closeButton.setActionCommand("CLOSE"); + closeButton.addActionListener(this); + closePanel.add(closeButton); + content.add(closePanel, BorderLayout.SOUTH); + getContentPane().add(content); + } + + /** + * Returns a panel with the demo content. The panel uses a BorderLayout(), and + * the BorderLayout.SOUTH area is empty, to allow callers to add controls to + * the bottom of the panel if they want to (a close button is added if this + * demo is being run as a standalone demo). + */ + JPanel createContent() + { + if (content == null) + { + content = new JPanel(new BorderLayout()); + JTabbedPane tabPane = new JTabbedPane(); + tabPane.addTab("Non-wrap", createNonWrapPanel()); + tabPane.addTab("Char-wrap", createCharWrapPanel()); + tabPane.addTab("Word-wrap", createWordWrapPanel()); + tabPane.addTab("Custom colors", createCustomColoredPanel()); + tabPane.addTab("Misc", createMiscPanel()); + content.add(tabPane); + // content.setPreferredSize(new Dimension(400, 300)); + } + return content; + } + + private JPanel createNonWrapPanel() + { + JPanel panel = new JPanel(new BorderLayout()); + panel.setBorder(BorderFactory.createTitledBorder("Not wrapping")); + + panel1 = new JPanel(new GridLayout(2, 2)); + + textarea1 = new JTextArea("Hello World!"); + textarea1.setFont(new Font("Dialog", Font.PLAIN, 8)); + panel1.add(new JScrollPane(textarea1)); + + textarea2 = new JTextArea("Hello World!"); + textarea2.setFont(new Font("Dialog", Font.ITALIC, 12)); + panel1.add(new JScrollPane(textarea2)); + + textarea3 = new JTextArea("Hello World!"); + textarea3.setFont(new Font("Dialog", Font.BOLD, 14)); + panel1.add(new JScrollPane(textarea3)); + + panel.add(panel1); + + JPanel statePanel = new JPanel(); + statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS)); + statePanel.add(Box.createVerticalGlue()); + enabled1 = new JCheckBox("enabled"); + enabled1.setSelected(true); + enabled1.addActionListener(this); + enabled1.setActionCommand("ENABLED1"); + statePanel.add(enabled1); + editable1 = new JCheckBox("editable"); + editable1.setSelected(true); + editable1.addActionListener(this); + editable1.setActionCommand("EDITABLE1"); + statePanel.add(editable1); + statePanel.add(Box.createVerticalGlue()); + panel.add(statePanel, BorderLayout.EAST); + + return panel; + } + + private JPanel createCharWrapPanel() + { + JPanel panel = new JPanel(new BorderLayout()); + panel.setBorder(BorderFactory.createTitledBorder("Wrap at char bounds")); + + JPanel innerPanel = new JPanel(new GridLayout(2, 2)); + + textarea4 = new JTextArea("Hello World!"); + textarea4.setLineWrap(true); + textarea4.setFont(new Font("Dialog", Font.PLAIN, 8)); + innerPanel.add(new JScrollPane(textarea4)); + + textarea5 = new JTextArea("Hello World!"); + textarea5.setLineWrap(true); + textarea5.setFont(new Font("Dialog", Font.ITALIC, 12)); + innerPanel.add(new JScrollPane(textarea5)); + + textarea6 = new JTextArea("Hello World!"); + textarea6.setLineWrap(true); + textarea6.setFont(new Font("Dialog", Font.BOLD, 14)); + innerPanel.add(new JScrollPane(textarea6)); + + panel.add(innerPanel); + + JPanel statePanel = new JPanel(); + statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS)); + statePanel.add(Box.createVerticalGlue()); + enabled2 = new JCheckBox("enabled"); + enabled2.setSelected(true); + enabled2.addActionListener(this); + enabled2.setActionCommand("ENABLED2"); + statePanel.add(enabled2); + editable2 = new JCheckBox("editable"); + editable2.setSelected(true); + editable2.addActionListener(this); + editable2.setActionCommand("EDITABLE2"); + statePanel.add(editable2); + statePanel.add(Box.createVerticalGlue()); + panel.add(statePanel, BorderLayout.EAST); + + return panel; + } + + private JPanel createWordWrapPanel() + { + JPanel panel = new JPanel(new BorderLayout()); + panel.setBorder(BorderFactory.createTitledBorder("Wrap at word bounds")); + + JPanel innerPanel = new JPanel(new GridLayout(2, 2)); + + textarea7 = new JTextArea("Hello World!"); + textarea7.setWrapStyleWord(true); + textarea7.setLineWrap(true); + textarea7.setFont(new Font("Dialog", Font.PLAIN, 8)); + innerPanel.add(new JScrollPane(textarea7)); + + textarea8 = new JTextArea("Hello World!"); + textarea8.setWrapStyleWord(true); + textarea8.setLineWrap(true); + textarea8.setFont(new Font("Dialog", Font.ITALIC, 12)); + innerPanel.add(new JScrollPane(textarea8)); + + textarea9 = new JTextArea("Hello World!"); + textarea9.setWrapStyleWord(true); + textarea9.setLineWrap(true); + textarea9.setFont(new Font("Dialog", Font.BOLD, 14)); + innerPanel.add(new JScrollPane(textarea9)); + + panel.add(innerPanel); + + JPanel statePanel = new JPanel(); + statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS)); + statePanel.add(Box.createVerticalGlue()); + enabled3 = new JCheckBox("enabled"); + enabled3.setSelected(true); + enabled3.addActionListener(this); + enabled3.setActionCommand("ENABLED3"); + statePanel.add(enabled3); + editable3 = new JCheckBox("editable"); + editable3.setSelected(true); + editable3.addActionListener(this); + editable3.setActionCommand("EDITABLE3"); + statePanel.add(editable3); + statePanel.add(Box.createVerticalGlue()); + panel.add(statePanel, BorderLayout.EAST); + + return panel; + } + + private JPanel createCustomColoredPanel() + { + JPanel panel = new JPanel(new BorderLayout()); + + JPanel innerPanel = new JPanel(new GridLayout(3, 2)); + panel.setBorder(BorderFactory.createTitledBorder("Custom colors")); + + textarea10 = new JTextArea("custom foreground", 10, 15); + textarea10.setForeground(Color.GREEN); + innerPanel.add(new JScrollPane(textarea10)); + + textarea11 = new JTextArea("custom background", 10, 15); + textarea11.setForeground(Color.YELLOW); + innerPanel.add(new JScrollPane(textarea11)); + + textarea12 = new JTextArea("custom disabled textcolor", 10, 15); + textarea12.setDisabledTextColor(Color.BLUE); + innerPanel.add(new JScrollPane(textarea12)); + + textarea13 = new JTextArea("custom selected text color", 10, 15); + textarea13.setSelectedTextColor(Color.RED); + innerPanel.add(new JScrollPane(textarea13)); + + textarea14 = new JTextArea("custom selection color", 10, 15); + textarea14.setSelectionColor(Color.CYAN); + innerPanel.add(new JScrollPane(textarea14)); + + textarea14b = new JTextArea("custom selection and selected text color", 10, 15); + textarea14b.setSelectedTextColor(Color.WHITE); + textarea14b.setSelectionColor(Color.BLACK); + innerPanel.add(new JScrollPane(textarea14b)); + + panel.add(innerPanel); + + JPanel statePanel = new JPanel(); + statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS)); + statePanel.add(Box.createVerticalGlue()); + enabled4 = new JCheckBox("enabled"); + enabled4.setSelected(true); + enabled4.addActionListener(this); + enabled4.setActionCommand("ENABLED4"); + statePanel.add(enabled4); + editable4 = new JCheckBox("editable"); + editable4.setSelected(true); + editable4.addActionListener(this); + editable4.setActionCommand("EDITABLE4"); + statePanel.add(editable4); + statePanel.add(Box.createVerticalGlue()); + panel.add(statePanel, BorderLayout.EAST); + + return panel; + } + + private JPanel createMiscPanel() + { + JPanel panel = new JPanel(new BorderLayout()); + panel.setBorder(BorderFactory.createTitledBorder("Miscellaneous")); + + JPanel innerPanel = new JPanel(new GridLayout(2, 2)); + + textarea15 = new JTextArea("Custom Caret"); + textarea15.setCaret(new CornerCaret()); + innerPanel.add(new JScrollPane(textarea15)); + + textarea16 = new JTextArea("Custom Caret color"); + textarea16.setCaretColor(Color.MAGENTA); + innerPanel.add(new JScrollPane(textarea16)); + + textarea16 = new JTextArea("Custom Selection painter"); + textarea16.setFont(new Font("Dialog", Font.PLAIN, 24)); + textarea16.setCaret(new DefaultCaret() + { + public Highlighter.HighlightPainter getSelectionPainter() + { + return DemoHighlightPainter.INSTANCE; + } + }); + + innerPanel.add(new JScrollPane(textarea16)); + + panel.add(innerPanel); + + JPanel statePanel = new JPanel(); + statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS)); + statePanel.add(Box.createVerticalGlue()); + enabled5 = new JCheckBox("enabled"); + enabled5.setSelected(true); + enabled5.addActionListener(this); + enabled5.setActionCommand("ENABLED5"); + statePanel.add(enabled5); + editable5 = new JCheckBox("editable"); + editable5.setSelected(true); + editable5.addActionListener(this); + editable5.setActionCommand("EDITABLE5"); + statePanel.add(editable5); + statePanel.add(Box.createVerticalGlue()); + panel.add(statePanel, BorderLayout.EAST); + + return panel; + } + + public void actionPerformed(ActionEvent e) + { + if (e.getActionCommand().equals("CLOSE")) + { + System.exit(0); + } + else if (e.getActionCommand().equals("ENABLED1")) + { + boolean enabled = enabled1.isSelected(); + textarea1.setEnabled(enabled); + textarea2.setEnabled(enabled); + textarea3.setEnabled(enabled); + } + else if (e.getActionCommand().equals("EDITABLE1")) + { + boolean editable = editable1.isSelected(); + textarea1.setEditable(editable); + textarea2.setEditable(editable); + textarea3.setEditable(editable); + } + else if (e.getActionCommand().equals("ENABLED2")) + { + boolean enabled = enabled2.isSelected(); + textarea4.setEnabled(enabled); + textarea5.setEnabled(enabled); + textarea6.setEnabled(enabled); + } + else if (e.getActionCommand().equals("EDITABLE2")) + { + boolean editable = editable2.isSelected(); + textarea4.setEditable(editable); + textarea5.setEditable(editable); + textarea6.setEditable(editable); + } + else if (e.getActionCommand().equals("ENABLED3")) + { + boolean enabled = enabled3.isSelected(); + textarea7.setEnabled(enabled); + textarea8.setEnabled(enabled); + textarea9.setEnabled(enabled); + } + else if (e.getActionCommand().equals("EDITABLE3")) + { + boolean editable = editable3.isSelected(); + textarea7.setEditable(editable); + textarea8.setEditable(editable); + textarea9.setEditable(editable); + } + else if (e.getActionCommand().equals("ENABLED4")) + { + boolean enabled = enabled4.isSelected(); + textarea10.setEnabled(enabled); + textarea11.setEnabled(enabled); + textarea12.setEnabled(enabled); + textarea13.setEnabled(enabled); + textarea14.setEnabled(enabled); + textarea14b.setEnabled(enabled); + } + else if (e.getActionCommand().equals("EDITABLE4")) + { + boolean editable = editable4.isSelected(); + textarea10.setEditable(editable); + textarea11.setEditable(editable); + textarea12.setEditable(editable); + textarea13.setEditable(editable); + textarea14.setEditable(editable); + textarea14b.setEditable(editable); + } + } + + public static void main(String[] args) + { + TextAreaDemo app = new TextAreaDemo("TextArea Demo"); + app.initFrameContent(); + app.pack(); + app.setVisible(true); + } + +} |