diff options
author | Robert Schuster <theBohemian@gmx.net> | 2006-04-18 20:53:33 +0000 |
---|---|---|
committer | Robert Schuster <theBohemian@gmx.net> | 2006-04-18 20:53:33 +0000 |
commit | 11de7e7288fa0932f683fd026c0d848bedb42b3e (patch) | |
tree | 04923f8467dcf045f4e036aa31d9f5a36a85b6bd /examples | |
parent | 14fab039baff46930ba791bfab936428159ee317 (diff) | |
download | classpath-11de7e7288fa0932f683fd026c0d848bedb42b3e.tar.gz |
Fixes PR #27172.
2006-04-18 Robert Schuster <robertschuster@fsfe.org>
* examples/gnu/classpath/examples/swing/NavigationFilterDemo.java:
New file.
* examples/gnu/classpath/examples/swing/Demo.java:
(mkMenuBar): Added NavigationFilter demo.
Diffstat (limited to 'examples')
-rw-r--r-- | examples/gnu/classpath/examples/swing/Demo.java | 3 | ||||
-rw-r--r-- | examples/gnu/classpath/examples/swing/NavigationFilterDemo.java | 206 |
2 files changed, 209 insertions, 0 deletions
diff --git a/examples/gnu/classpath/examples/swing/Demo.java b/examples/gnu/classpath/examples/swing/Demo.java index a0f50715e..0f0b3555e 100644 --- a/examples/gnu/classpath/examples/swing/Demo.java +++ b/examples/gnu/classpath/examples/swing/Demo.java @@ -153,6 +153,9 @@ public class Demo examples.add(new JMenuItem(new PopupAction("DocumentFilter", DocumentFilterDemo.createDemoFactory()))); + + examples.add(new JMenuItem(new PopupAction("NavigationFilter", + NavigationFilterDemo.createDemoFactory()))); final JMenuItem vmMenu; diff --git a/examples/gnu/classpath/examples/swing/NavigationFilterDemo.java b/examples/gnu/classpath/examples/swing/NavigationFilterDemo.java new file mode 100644 index 000000000..6c1be74cc --- /dev/null +++ b/examples/gnu/classpath/examples/swing/NavigationFilterDemo.java @@ -0,0 +1,206 @@ +/* NavigationFilterDemo.java -- An example for the NavigationFilter class. + Copyright (C) 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.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTextArea; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.text.BadLocationException; +import javax.swing.text.JTextComponent; +import javax.swing.text.NavigationFilter; +import javax.swing.text.Position; +import javax.swing.text.Utilities; + +/** + * A demonstration of the <code>javax.swing.text.NavigationFilter</code> class. + * + * <p>It shows a NavigationFilter which lets you walk word-wise + * through a text.</p> + * + * @author Robert Schuster + */ +public class NavigationFilterDemo + extends JPanel + implements ActionListener +{ + + JTextArea textArea; + + /** + * Creates a new demo instance. + */ + public NavigationFilterDemo() + { + 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. + */ + void initFrameContent() + { + JPanel closePanel = new JPanel(); + JButton closeButton = new JButton("Close"); + closeButton.setActionCommand("CLOSE"); + closeButton.addActionListener(this); + closePanel.add(closeButton); + add(closePanel, BorderLayout.SOUTH); + } + + private void createContent() + { + setLayout(new BorderLayout()); + + add(textArea = new JTextArea(10, 20)); + + textArea.setWrapStyleWord(true); + + textArea.setLineWrap(true); + + textArea.setNavigationFilter(new WordFilter()); + + textArea.setText("GNU Classpath, Essential Libraries for Java, " + + "is a GNU project to create free core class " + + "libraries for use with virtual machines and " + + "compilers for the java programming language."); + } + + public void actionPerformed(ActionEvent e) + { + if (e.getActionCommand().equals("CLOSE")) + System.exit(0); + + } + + public static void main(String[] args) + { + SwingUtilities.invokeLater + (new Runnable() + { + public void run() + { + NavigationFilterDemo app = new NavigationFilterDemo(); + app.initFrameContent(); + JFrame frame = new JFrame("NavigationFilterDemo"); + frame.getContentPane().add(app); + frame.pack(); + frame.setVisible(true); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + }); + } + + /** + * Returns a DemoFactory that creates a NavigationFilterDemo. + * + * @return a DemoFactory that creates a NavigationFilterDemo + */ + public static DemoFactory createDemoFactory() + { + return new DemoFactory() + { + public JComponent createDemo() + { + return new NavigationFilterDemo(); + } + }; + } + + class WordFilter extends NavigationFilter + { + public int getNextVisualPositionFrom(JTextComponent text, + int pos, + Position.Bias bias, + int direction, + Position.Bias[] biasRet) + throws BadLocationException + { + Point pt; + + int newpos = pos; + switch (direction) + { + case SwingConstants.NORTH: + // Find out where the caret want to be positioned ideally. + pt = text.getCaret().getMagicCaretPosition(); + + // Calculate its position above. + newpos = Utilities.getPositionAbove(text, pos, pt.x); + + // If we have a valid position, then calculate the next word start + // from there. + if (newpos != -1) + return Utilities.getWordStart(text, newpos); + else + return pos; + case SwingConstants.SOUTH: + // Find out where the caret want to be positioned ideally. + pt = text.getCaret().getMagicCaretPosition(); + + // Calculate its position below. + newpos = Utilities.getPositionBelow(text, pos, pt.x); + + // If we have a valid position, then calculate the next word start + // from there. + if (newpos != -1) + return Utilities.getWordStart(text, newpos); + else + return pos; + case SwingConstants.WEST: + // Calculate the next word start. + newpos = Utilities.getWordStart(text, newpos);; + + // If that means that the caret will not move, return + // the start of the previous word. + if (newpos != pos) + return newpos; + else + return Utilities.getPreviousWord(text, newpos); + case SwingConstants.EAST: + // Simply calculate the next word's start offset. + return Utilities.getNextWord(text, newpos); + default: + // Do whatever the super implementation did. + return super.getNextVisualPositionFrom(text, pos, bias, + direction, biasRet); + } + } + + } + +} |