Imported GNU Classpath 0.90
Imported GNU Classpath 0.90
* scripts/makemake.tcl: LocaleData.java moved to gnu/java/locale.
* sources.am: Regenerated.
* gcj/javaprims.h: Regenerated.
* Makefile.in: Regenerated.
* gcj/Makefile.in: Regenerated.
* include/Makefile.in: Regenerated.
* testsuite/Makefile.in: Regenerated.
* gnu/java/lang/VMInstrumentationImpl.java: New override.
* gnu/java/net/local/LocalSocketImpl.java: Likewise.
* gnu/classpath/jdwp/VMMethod.java: Likewise.
* gnu/classpath/jdwp/VMVirtualMachine.java: Update to latest
interface.
* java/lang/Thread.java: Add UncaughtExceptionHandler.
* java/lang/reflect/Method.java: Implements GenericDeclaration and
isSynthetic(),
* java/lang/reflect/Field.java: Likewise.
* java/lang/reflect/Constructor.java
* java/lang/Class.java: Implements Type, GenericDeclaration,
getSimpleName() and getEnclosing*() methods.
* java/lang/Class.h: Add new public methods.
* java/lang/Math.java: Add signum(), ulp() and log10().
* java/lang/natMath.cc (log10): New function.
* java/security/VMSecureRandom.java: New override.
* java/util/logging/Logger.java: Updated to latest classpath
version.
* java/util/logging/LogManager.java: New override.
From-SVN: r113887
This commit is contained in:
@@ -1,17 +1,18 @@
|
||||
## Input file for automake to generate the Makefile.in used by configure
|
||||
GLIBJ_CLASSPATH='$(top_builddir)/lib':'$(top_builddir)/lib/glibj.zip'
|
||||
|
||||
# Setup the compiler to use the GNU Classpath library we just build
|
||||
if FOUND_GCJ
|
||||
JCOMPILER = $(GCJ) --bootclasspath '$(top_builddir)/lib' --classpath . -C
|
||||
JCOMPILER = $(GCJ) -encoding UTF-8 --bootclasspath $(GLIBJ_CLASSPATH) --classpath . -C
|
||||
else
|
||||
if FOUND_JIKES
|
||||
JCOMPILER = $(JIKES) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(top_builddir)/lib:.
|
||||
JCOMPILER = $(JIKES) $(JIKESENCODING) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(GLIBJ_CLASSPATH):.
|
||||
else
|
||||
if FOUND_GCJX
|
||||
JCOMPILER = $(GCJX) -bootclasspath '' -sourcepath '' -classpath $(top_builddir)/lib:.
|
||||
JCOMPILER = $(GCJX) -encoding UTF-8 -bootclasspath '' -sourcepath '' -classpath $(GLIBJ_CLASSPATH):.
|
||||
else
|
||||
if FOUND_ECJ
|
||||
JCOMPILER = $(ECJ) -bootclasspath '$(top_builddir)/lib' -classpath .
|
||||
JCOMPILER = $(ECJ) -encoding UTF-8 -bootclasspath $(GLIBJ_CLASSPATH) -classpath .
|
||||
else
|
||||
error dunno how to setup the JCOMPILER and compile
|
||||
endif
|
||||
|
||||
@@ -80,6 +80,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
|
||||
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
|
||||
CLASSPATH_MODULE = @CLASSPATH_MODULE@
|
||||
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
|
||||
@@ -119,6 +120,8 @@ ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
ECJ = @ECJ@
|
||||
EGREP = @EGREP@
|
||||
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
|
||||
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
|
||||
ERROR_CFLAGS = @ERROR_CFLAGS@
|
||||
EXAMPLESDIR = @EXAMPLESDIR@
|
||||
EXEEXT = @EXEEXT@
|
||||
@@ -139,6 +142,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
|
||||
GCJ = @GCJ@
|
||||
GCJX = @GCJX@
|
||||
GJDOC = @GJDOC@
|
||||
GREP = @GREP@
|
||||
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
|
||||
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
|
||||
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
|
||||
@@ -186,6 +190,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
|
||||
PANGOFT2_LIBS = @PANGOFT2_LIBS@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
|
||||
PERL = @PERL@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
QT_CFLAGS = @QT_CFLAGS@
|
||||
@@ -204,8 +209,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
|
||||
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
|
||||
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
|
||||
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
|
||||
USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
|
||||
USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
|
||||
VERSION = @VERSION@
|
||||
WARNING_CFLAGS = @WARNING_CFLAGS@
|
||||
XMKMF = @XMKMF@
|
||||
XML_CFLAGS = @XML_CFLAGS@
|
||||
XML_LIBS = @XML_LIBS@
|
||||
XSLT_CFLAGS = @XSLT_CFLAGS@
|
||||
@@ -217,8 +225,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
|
||||
ZIP = @ZIP@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@@ -235,7 +241,10 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
default_toolkit = @default_toolkit@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
glibjdir = @glibjdir@
|
||||
host = @host@
|
||||
@@ -243,18 +252,22 @@ host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
nativelibdir = @nativelibdir@
|
||||
nativeexeclibdir = @nativeexeclibdir@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
@@ -264,12 +277,13 @@ target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
vm_classes = @vm_classes@
|
||||
@FOUND_ECJ_TRUE@@FOUND_GCJX_FALSE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(ECJ) -bootclasspath '$(top_builddir)/lib' -classpath .
|
||||
@FOUND_GCJX_TRUE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(GCJX) -bootclasspath '' -sourcepath '' -classpath $(top_builddir)/lib:.
|
||||
@FOUND_GCJ_FALSE@@FOUND_JIKES_TRUE@JCOMPILER = $(JIKES) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(top_builddir)/lib:.
|
||||
GLIBJ_CLASSPATH = '$(top_builddir)/lib':'$(top_builddir)/lib/glibj.zip'
|
||||
@FOUND_ECJ_TRUE@@FOUND_GCJX_FALSE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(ECJ) -encoding UTF-8 -bootclasspath $(GLIBJ_CLASSPATH) -classpath .
|
||||
@FOUND_GCJX_TRUE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(GCJX) -encoding UTF-8 -bootclasspath '' -sourcepath '' -classpath $(GLIBJ_CLASSPATH):.
|
||||
@FOUND_GCJ_FALSE@@FOUND_JIKES_TRUE@JCOMPILER = $(JIKES) $(JIKESENCODING) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(GLIBJ_CLASSPATH):.
|
||||
|
||||
# Setup the compiler to use the GNU Classpath library we just build
|
||||
@FOUND_GCJ_TRUE@JCOMPILER = $(GCJ) --bootclasspath '$(top_builddir)/lib' --classpath . -C
|
||||
@FOUND_GCJ_TRUE@JCOMPILER = $(GCJ) -encoding UTF-8 --bootclasspath $(GLIBJ_CLASSPATH) --classpath . -C
|
||||
|
||||
# All our example java source files
|
||||
EXAMPLE_JAVA_FILES = $(srcdir)/gnu/classpath/examples/*/*.java $(srcdir)/gnu/classpath/examples/*/*/*.java $(srcdir)/gnu/classpath/examples/*/*/*/*.java
|
||||
|
||||
@@ -0,0 +1,233 @@
|
||||
/* AnimationApplet.java -- An example of an old-style AWT applet
|
||||
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.awt;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.applet.*;
|
||||
|
||||
|
||||
/**
|
||||
* AnimationApplet demonstrates the need for Xflush calls in
|
||||
* GdkGraphics.c. To see how this demo can fail in their absence,
|
||||
* remove the contents of schedule_flush in GdkGraphics.c. The
|
||||
* animation will be so choppy that it is effectively stopped.
|
||||
*/
|
||||
public class AnimationApplet
|
||||
extends Applet
|
||||
implements Runnable
|
||||
{
|
||||
boolean going = false;
|
||||
Thread animThread = null;
|
||||
int SPEED = 5;
|
||||
int circleX = 0;
|
||||
int circleY = 0;
|
||||
int circleXold = 0;
|
||||
int circleYold = 0;
|
||||
int circleXdelta = 0;
|
||||
int circleYdelta = 0;
|
||||
int circleDiameter = 0;
|
||||
int autoCircleX = 0;
|
||||
int autoCircleY = 0;
|
||||
int autoCircleXold = 0;
|
||||
int autoCircleYold = 0;
|
||||
int autoCircleXdelta = (int) (0.66 * SPEED);
|
||||
int autoCircleYdelta = (int) (1.33 * SPEED);
|
||||
int boardWidth = 0;
|
||||
int boardHeight = 0;
|
||||
int CIRCLE_SIZE = 5;
|
||||
|
||||
private Graphics appletGraphics;
|
||||
|
||||
// Update the circles' location values.
|
||||
private void moveCircles()
|
||||
{
|
||||
circleX += circleXdelta;
|
||||
if (circleX < 0)
|
||||
circleX = 0;
|
||||
if (circleX > boardWidth - circleDiameter)
|
||||
circleX = boardWidth - circleDiameter;
|
||||
|
||||
circleY += circleYdelta;
|
||||
if (circleY < 0)
|
||||
circleY = 0;
|
||||
if (circleY > boardHeight - circleDiameter)
|
||||
circleY = boardHeight - circleDiameter;
|
||||
|
||||
autoCircleX += autoCircleXdelta;
|
||||
if (autoCircleX < 0)
|
||||
{
|
||||
autoCircleX = 0;
|
||||
autoCircleXdelta = -autoCircleXdelta;
|
||||
}
|
||||
if (autoCircleX > boardWidth - circleDiameter)
|
||||
{
|
||||
autoCircleX = boardWidth - circleDiameter;
|
||||
autoCircleXdelta = -autoCircleXdelta;
|
||||
}
|
||||
|
||||
autoCircleY += autoCircleYdelta;
|
||||
if (autoCircleY < 0)
|
||||
{
|
||||
autoCircleY = 0;
|
||||
autoCircleYdelta = -autoCircleYdelta;
|
||||
}
|
||||
if (autoCircleY > boardHeight - circleDiameter)
|
||||
{
|
||||
autoCircleY = boardHeight - circleDiameter;
|
||||
autoCircleYdelta = -autoCircleYdelta;
|
||||
}
|
||||
}
|
||||
|
||||
// Clear the circle in the old location and paint a new circle
|
||||
// in the new location.
|
||||
private void paintCircles()
|
||||
{
|
||||
appletGraphics.setColor(Color.BLUE);
|
||||
appletGraphics.fillOval(circleXold, circleYold, circleDiameter,
|
||||
circleDiameter);
|
||||
appletGraphics.setColor(Color.YELLOW);
|
||||
appletGraphics.fillOval(circleX, circleY, circleDiameter,
|
||||
circleDiameter);
|
||||
|
||||
appletGraphics.setColor(Color.BLUE);
|
||||
appletGraphics.fillOval(autoCircleXold, autoCircleYold, circleDiameter,
|
||||
circleDiameter);
|
||||
appletGraphics.setColor(Color.WHITE);
|
||||
appletGraphics.fillOval(autoCircleX, autoCircleY, circleDiameter,
|
||||
circleDiameter);
|
||||
}
|
||||
|
||||
// Override Applet.run.
|
||||
public void run()
|
||||
{
|
||||
while (animThread != null)
|
||||
{
|
||||
circleXold = circleX;
|
||||
circleYold = circleY;
|
||||
autoCircleXold = autoCircleX;
|
||||
autoCircleYold = autoCircleY;
|
||||
|
||||
moveCircles();
|
||||
paintCircles();
|
||||
|
||||
if (animThread != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
Thread.sleep(20);
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Override Applet.paint.
|
||||
public void paint(Graphics g)
|
||||
{
|
||||
boardWidth = this.getSize().width;
|
||||
boardHeight = this.getSize().height;
|
||||
g.setColor(Color.BLUE);
|
||||
g.fillRect(0, 0, boardWidth, boardHeight);
|
||||
if (!going)
|
||||
{
|
||||
FontMetrics fm = appletGraphics.getFontMetrics();
|
||||
appletGraphics.setColor(Color.WHITE);
|
||||
String msg = "Click to Start";
|
||||
appletGraphics.drawString(msg,
|
||||
(boardWidth >> 1) - (fm.stringWidth(msg) >> 1),
|
||||
(boardHeight >> 1) - (fm.getHeight() >> 1));
|
||||
}
|
||||
}
|
||||
|
||||
// Override Applet.destroy.
|
||||
public void destroy()
|
||||
{
|
||||
// animThread.stop();
|
||||
animThread = null;
|
||||
}
|
||||
|
||||
// Override Applet.init.
|
||||
public void init()
|
||||
{
|
||||
boardWidth = this.getSize().width;
|
||||
boardHeight = this.getSize().height;
|
||||
going = false;
|
||||
appletGraphics = getGraphics();
|
||||
appletGraphics.setFont(new Font(appletGraphics.getFont().getName(),
|
||||
Font.BOLD, 15));
|
||||
}
|
||||
|
||||
// Override Component.preferredSize for when we're run standalone.
|
||||
public Dimension preferredSize ()
|
||||
{
|
||||
return new Dimension (400, 400);
|
||||
}
|
||||
|
||||
// Override Applet.handleEvent, the old-style AWT-event handler.
|
||||
public boolean handleEvent(Event event)
|
||||
{
|
||||
switch (event.id)
|
||||
{
|
||||
case Event.MOUSE_DOWN:
|
||||
if (!going)
|
||||
{
|
||||
going = true;
|
||||
circleDiameter = boardWidth / CIRCLE_SIZE;
|
||||
circleX = (boardWidth - circleDiameter) >> 1;
|
||||
circleY = (boardHeight - circleDiameter) >> 1;
|
||||
circleXdelta = 0;
|
||||
circleYdelta = 0;
|
||||
repaint();
|
||||
animThread = new Thread(this);
|
||||
animThread.start();
|
||||
}
|
||||
break;
|
||||
case Event.KEY_ACTION:
|
||||
case Event.KEY_PRESS:
|
||||
if (event.key == Event.LEFT)
|
||||
circleXdelta = -SPEED;
|
||||
else if (event.key == Event.RIGHT)
|
||||
circleXdelta = SPEED;
|
||||
else if (event.key == Event.UP)
|
||||
circleYdelta = -SPEED;
|
||||
else if (event.key == Event.DOWN)
|
||||
circleYdelta = SPEED;
|
||||
break;
|
||||
case Event.KEY_ACTION_RELEASE:
|
||||
case Event.KEY_RELEASE:
|
||||
if (event.key == Event.LEFT && circleXdelta < 0)
|
||||
circleXdelta = 0;
|
||||
else if (event.key == Event.RIGHT && circleXdelta > 0)
|
||||
circleXdelta = 0;
|
||||
else if (event.key == Event.UP && circleYdelta < 0)
|
||||
circleYdelta = 0;
|
||||
else if (event.key == Event.DOWN && circleYdelta > 0)
|
||||
circleYdelta = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Demo.java -- Shows examples of AWT components
|
||||
Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2002, 2004, 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath examples.
|
||||
|
||||
@@ -153,7 +153,8 @@ class Demo
|
||||
addSubWindow ("TextField", new TextFieldWindow ());
|
||||
addSubWindow ("RandomTests", new TestWindow (this));
|
||||
addSubWindow ("RoundRect", new RoundRectWindow ());
|
||||
|
||||
addSubWindow ("Animation", new AnimationWindow ());
|
||||
|
||||
Panel sp = new Panel();
|
||||
PrettyPanel p = new PrettyPanel();
|
||||
p.setLayout (new GridLayout (windows.size(), 1));
|
||||
@@ -864,4 +865,35 @@ class Demo
|
||||
}
|
||||
}
|
||||
|
||||
static class AnimationWindow extends SubFrame
|
||||
{
|
||||
AnimationApplet a;
|
||||
public void init ()
|
||||
{
|
||||
initted = true;
|
||||
setTitle("Animation");
|
||||
Button cb = new Button ("Close");
|
||||
cb.addActionListener(new ActionListener () {
|
||||
public void actionPerformed (ActionEvent e)
|
||||
{
|
||||
if (a != null)
|
||||
{
|
||||
a.destroy();
|
||||
dispose();
|
||||
}
|
||||
}
|
||||
});
|
||||
a = new AnimationApplet();
|
||||
add(a, "Center");
|
||||
add(cb, "South");
|
||||
pack();
|
||||
}
|
||||
|
||||
public void show()
|
||||
{
|
||||
super.show();
|
||||
a.init();
|
||||
a.run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 45 KiB |
@@ -0,0 +1,391 @@
|
||||
/* Demo.java -- Simple Java Print Service Demo
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
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.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.classpath.examples.print;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.GridBagConstraints;
|
||||
import java.awt.GridBagLayout;
|
||||
import java.awt.Insets;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
||||
import javax.print.DocFlavor;
|
||||
import javax.print.DocPrintJob;
|
||||
import javax.print.PrintException;
|
||||
import javax.print.PrintService;
|
||||
import javax.print.PrintServiceLookup;
|
||||
import javax.print.ServiceUI;
|
||||
import javax.print.SimpleDoc;
|
||||
import javax.print.attribute.Attribute;
|
||||
import javax.print.attribute.HashPrintRequestAttributeSet;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JList;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JTabbedPane;
|
||||
import javax.swing.JTextField;
|
||||
|
||||
|
||||
/**
|
||||
* A simple demo showing the use of the Java Print Service API.
|
||||
* @author Wolfgang Baer (WBaer@gmx.de)
|
||||
*/
|
||||
public class Demo extends JFrame
|
||||
implements ActionListener
|
||||
{
|
||||
// The discovered print services
|
||||
private static PrintService[] services;
|
||||
|
||||
// variables for the PrintPanel demo
|
||||
private HashPrintRequestAttributeSet atts;
|
||||
private PrintService dialogSelectedService;
|
||||
private JTextField dialogSelectedService_Tf;
|
||||
private JList dialogSelectedServiceAtts;
|
||||
private JComboBox dialogSelectedServicedocFormat;
|
||||
private JTextField selectedFileTf;
|
||||
private File selectedFile;
|
||||
|
||||
// variables for the PrintServicePanel demo
|
||||
private JComboBox serviceBox;
|
||||
private JList docFormat;
|
||||
private JList attCategories;
|
||||
|
||||
static
|
||||
{
|
||||
// lookup all services without any constraints
|
||||
services = PrintServiceLookup.lookupPrintServices(null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs the Print Demo
|
||||
* @param title - the demo title.
|
||||
*/
|
||||
public Demo(String title)
|
||||
{
|
||||
super(title);
|
||||
JPanel content = new JPanel(new BorderLayout());
|
||||
|
||||
JTabbedPane tabbed = new JTabbedPane();
|
||||
tabbed.addTab("Discover print services", createPrintServicePanel());
|
||||
tabbed.addTab("Print a file", createPrintPanel());
|
||||
|
||||
JPanel closePanel = new JPanel();
|
||||
JButton closeButton = new JButton("Close");
|
||||
closeButton.setActionCommand("CLOSE");
|
||||
closeButton.addActionListener(this);
|
||||
closePanel.add(closeButton);
|
||||
|
||||
content.add(tabbed, BorderLayout.CENTER);
|
||||
content.add(closePanel, BorderLayout.SOUTH);
|
||||
getContentPane().add(content);
|
||||
}
|
||||
|
||||
private JPanel createPrintServicePanel()
|
||||
{
|
||||
JPanel panel = new JPanel(new GridBagLayout());
|
||||
GridBagConstraints c = new GridBagConstraints();
|
||||
|
||||
c.insets = new Insets(5,5,5,5);
|
||||
c.gridx = 0;
|
||||
c.gridy = 0;
|
||||
c.anchor = GridBagConstraints.WEST;
|
||||
c.fill = GridBagConstraints.HORIZONTAL;
|
||||
JLabel serviceBoxLb = new JLabel("Available print services: ");
|
||||
panel.add(serviceBoxLb, c);
|
||||
|
||||
c.gridx = 1;
|
||||
c.gridy = 0;
|
||||
serviceBox = new JComboBox(services);
|
||||
serviceBox.setActionCommand("SERVICE");
|
||||
serviceBox.addActionListener(this);
|
||||
panel.add(serviceBox, c);
|
||||
|
||||
c.gridx = 0;
|
||||
c.gridy = 1;
|
||||
JLabel docFormatLb = new JLabel("Supported DocFormat: ");
|
||||
panel.add(docFormatLb, c);
|
||||
|
||||
c.gridx = 1;
|
||||
c.gridy = 1;
|
||||
docFormat = new JList(services[0].getSupportedDocFlavors());
|
||||
docFormat.setVisibleRowCount(3);
|
||||
JScrollPane scrollPane = new JScrollPane(docFormat);
|
||||
panel.add(scrollPane, c);
|
||||
|
||||
c.gridx = 0;
|
||||
c.gridy = 2;
|
||||
JLabel categoriesLb = new JLabel("Supported Attribute categories: ");
|
||||
panel.add(categoriesLb, c);
|
||||
|
||||
c.gridx = 1;
|
||||
c.gridy = 2;
|
||||
attCategories = new JList(services[0].getSupportedAttributeCategories());
|
||||
attCategories.setVisibleRowCount(3);
|
||||
JScrollPane scrollPane2 = new JScrollPane(attCategories);
|
||||
panel.add(scrollPane2, c);
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
private JPanel createPrintPanel()
|
||||
{
|
||||
JPanel panel = new JPanel(new GridBagLayout());
|
||||
GridBagConstraints c = new GridBagConstraints();
|
||||
|
||||
c.insets = new Insets(5,5,5,5);
|
||||
c.gridx = 0;
|
||||
c.gridy = 0;
|
||||
c.gridwidth = 2;
|
||||
JButton serviceBtn = new JButton("Show print dialog ...");
|
||||
serviceBtn.addActionListener(this);
|
||||
panel.add(serviceBtn, c);
|
||||
|
||||
c.gridx = 0;
|
||||
c.gridy = 1;
|
||||
c.gridwidth = 1;
|
||||
c.anchor = GridBagConstraints.WEST;
|
||||
c.fill = GridBagConstraints.HORIZONTAL;
|
||||
JLabel selectedLb = new JLabel("Selected print service: ");
|
||||
panel.add(selectedLb, c);
|
||||
|
||||
c.gridx = 1;
|
||||
c.gridy = 1;
|
||||
dialogSelectedService_Tf = new JTextField(25);
|
||||
panel.add(dialogSelectedService_Tf, c);
|
||||
|
||||
c.gridx = 0;
|
||||
c.gridy = 2;
|
||||
JLabel selectedAttsLb = new JLabel("Selected Attributes: ");
|
||||
panel.add(selectedAttsLb, c);
|
||||
|
||||
c.gridx = 1;
|
||||
c.gridy = 2;
|
||||
c.weighty = 1.5;
|
||||
c.fill = GridBagConstraints.BOTH;
|
||||
dialogSelectedServiceAtts = new JList();
|
||||
dialogSelectedServiceAtts.setVisibleRowCount(3);
|
||||
JScrollPane scrollPane = new JScrollPane(dialogSelectedServiceAtts);
|
||||
panel.add(scrollPane, c);
|
||||
|
||||
c.gridx = 0;
|
||||
c.gridy = 3;
|
||||
c.fill = GridBagConstraints.HORIZONTAL;
|
||||
JLabel fileLb = new JLabel("File to print: ");
|
||||
panel.add(fileLb, c);
|
||||
|
||||
c.gridx = 1;
|
||||
c.gridy = 3;
|
||||
selectedFileTf = new JTextField(25);
|
||||
panel.add(selectedFileTf, c);
|
||||
|
||||
c.gridx = 2;
|
||||
c.gridy = 3;
|
||||
c.fill = GridBagConstraints.NONE;
|
||||
JButton fileBt = new JButton("Choose file");
|
||||
fileBt.addActionListener(this);
|
||||
panel.add(fileBt, c);
|
||||
|
||||
c.gridx = 0;
|
||||
c.gridy = 4;
|
||||
c.fill = GridBagConstraints.HORIZONTAL;
|
||||
JLabel docFormatLb = new JLabel("Document format of file: ");
|
||||
panel.add(docFormatLb, c);
|
||||
|
||||
c.gridx = 1;
|
||||
c.gridy = 4;
|
||||
dialogSelectedServicedocFormat = new JComboBox();
|
||||
panel.add(dialogSelectedServicedocFormat, c);
|
||||
|
||||
c.gridx = 0;
|
||||
c.gridy = 5;
|
||||
c.gridwidth = 2;
|
||||
c.anchor = GridBagConstraints.CENTER;
|
||||
c.fill = GridBagConstraints.NONE;
|
||||
JButton printBt = new JButton("Print");
|
||||
printBt.setActionCommand("PRINT");
|
||||
printBt.addActionListener(this);
|
||||
panel.add(printBt, c);
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple action control - only one listener
|
||||
* @param event
|
||||
*/
|
||||
public void actionPerformed(ActionEvent event)
|
||||
{
|
||||
if (event.getActionCommand().equals("CLOSE"))
|
||||
{
|
||||
System.exit(0);
|
||||
}
|
||||
else if (event.getActionCommand().equals("Choose file"))
|
||||
{
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
chooser.showOpenDialog(this);
|
||||
|
||||
selectedFile = chooser.getSelectedFile();
|
||||
|
||||
if (selectedFile != null)
|
||||
selectedFileTf.setText(selectedFile.getName());
|
||||
else
|
||||
selectedFileTf.setText("None selected");
|
||||
}
|
||||
else if (event.getActionCommand().equals("Show print dialog ..."))
|
||||
{
|
||||
atts = new HashPrintRequestAttributeSet();
|
||||
dialogSelectedService = ServiceUI.printDialog(null, 50, 50, services,
|
||||
null, null, atts);
|
||||
|
||||
if (dialogSelectedService != null)
|
||||
{
|
||||
dialogSelectedService_Tf.setText(dialogSelectedService.getName());
|
||||
|
||||
// we do not want to have the class representation in the dialog
|
||||
// as we later always use an InputStream to open the file selected
|
||||
|
||||
// use set to remove duplicates
|
||||
DocFlavor[] docflavors = dialogSelectedService.getSupportedDocFlavors();
|
||||
HashSet set = new HashSet();
|
||||
for (int i=0; i < docflavors.length; i++)
|
||||
{
|
||||
String charset = docflavors[i].getParameter("charset");
|
||||
String mimetype = docflavors[i].getMediaType() + "/" + docflavors[i].getMediaSubtype();
|
||||
if (charset != null)
|
||||
mimetype += "; charset=" + charset;
|
||||
set.add(mimetype);
|
||||
}
|
||||
|
||||
dialogSelectedServicedocFormat.removeAllItems();
|
||||
for (Iterator it = set.iterator(); it.hasNext(); )
|
||||
dialogSelectedServicedocFormat.addItem(it.next());
|
||||
}
|
||||
else
|
||||
dialogSelectedService_Tf.setText("None selected");
|
||||
|
||||
Attribute[] attsArray = atts.toArray();
|
||||
String[] attsSTr = new String[attsArray.length];
|
||||
for (int i = 0; i < attsSTr.length; i++)
|
||||
attsSTr[i] = attsArray[i].getName() + " - " + attsArray[i].toString();
|
||||
|
||||
dialogSelectedServiceAtts.setListData(attsSTr);
|
||||
|
||||
validate();
|
||||
}
|
||||
else if (event.getActionCommand().equals("PRINT"))
|
||||
{
|
||||
if (selectedFile != null && dialogSelectedService != null)
|
||||
{
|
||||
DocPrintJob job = dialogSelectedService.createPrintJob();
|
||||
|
||||
// choose correct docflavor
|
||||
String mimetype = (String) dialogSelectedServicedocFormat.getSelectedItem();
|
||||
|
||||
DocFlavor flavor = null;
|
||||
if (mimetype.equals(DocFlavor.INPUT_STREAM.GIF.getMimeType()))
|
||||
flavor = DocFlavor.INPUT_STREAM.GIF;
|
||||
else if (mimetype.equals(DocFlavor.INPUT_STREAM.AUTOSENSE.getMimeType()))
|
||||
flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
|
||||
else if (mimetype.equals(DocFlavor.INPUT_STREAM.JPEG.getMimeType()))
|
||||
flavor = DocFlavor.INPUT_STREAM.JPEG;
|
||||
else if (mimetype.equals(DocFlavor.INPUT_STREAM.PCL.getMimeType()))
|
||||
flavor = DocFlavor.INPUT_STREAM.PCL;
|
||||
else if (mimetype.equals(DocFlavor.INPUT_STREAM.PDF.getMimeType()))
|
||||
flavor = DocFlavor.INPUT_STREAM.PDF;
|
||||
else if (mimetype.equals(DocFlavor.INPUT_STREAM.PNG.getMimeType()))
|
||||
flavor = DocFlavor.INPUT_STREAM.PNG;
|
||||
else if (mimetype.equals(DocFlavor.INPUT_STREAM.POSTSCRIPT.getMimeType()))
|
||||
flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
|
||||
else if (mimetype.equals(DocFlavor.INPUT_STREAM.TEXT_HTML_HOST.getMimeType()))
|
||||
flavor = DocFlavor.INPUT_STREAM.TEXT_HTML_HOST;
|
||||
else if (mimetype.equals(DocFlavor.INPUT_STREAM.TEXT_PLAIN_HOST.getMimeType()))
|
||||
flavor = DocFlavor.INPUT_STREAM.TEXT_PLAIN_HOST;
|
||||
else
|
||||
flavor = new DocFlavor(mimetype, "java.io.InputStream");
|
||||
|
||||
try
|
||||
{
|
||||
SimpleDoc doc = new SimpleDoc(new FileInputStream(selectedFile), flavor, null);
|
||||
job.print(doc, atts);
|
||||
}
|
||||
catch (FileNotFoundException e)
|
||||
{
|
||||
JOptionPane.showMessageDialog(this, "The file was not found.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
catch (PrintException e)
|
||||
{
|
||||
JOptionPane.showMessageDialog(this, e, "PrintException", JOptionPane.ERROR_MESSAGE);
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
else
|
||||
JOptionPane.showMessageDialog(this, "Please select a file to print using the FileChooser", "No file selected", JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
else if (event.getActionCommand().equals("SERVICE"))
|
||||
{ // A new service was selected
|
||||
PrintService selected = (PrintService) serviceBox.getSelectedItem();
|
||||
|
||||
DocFlavor[] flavors = selected.getSupportedDocFlavors();
|
||||
docFormat.setListData(flavors);
|
||||
attCategories.setListData(selected.getSupportedAttributeCategories());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Main method.
|
||||
* @param args - nothing defined.
|
||||
*/
|
||||
public static void main(String[] args)
|
||||
{
|
||||
Demo app = new Demo("GNU Classpath printing demo");
|
||||
app.pack();
|
||||
app.setVisible(true);
|
||||
}
|
||||
}
|
||||
@@ -31,22 +31,22 @@ import javax.swing.BorderFactory;
|
||||
import javax.swing.ButtonGroup;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JRadioButton;
|
||||
import javax.swing.JToggleButton;
|
||||
import javax.swing.SwingConstants;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.plaf.metal.MetalIconFactory;
|
||||
|
||||
/**
|
||||
* A simple button demo showing various buttons in different states.
|
||||
*/
|
||||
public class ButtonDemo
|
||||
extends JFrame
|
||||
extends JPanel
|
||||
implements ActionListener
|
||||
{
|
||||
|
||||
private JPanel content;
|
||||
|
||||
private JCheckBox buttonState;
|
||||
private JButton button1;
|
||||
@@ -72,13 +72,10 @@ public class ButtonDemo
|
||||
|
||||
/**
|
||||
* Creates a new demo instance.
|
||||
*
|
||||
* @param title the frame title.
|
||||
*/
|
||||
public ButtonDemo(String title)
|
||||
public ButtonDemo()
|
||||
{
|
||||
super(title);
|
||||
JPanel content = createContent();
|
||||
createContent();
|
||||
// initFrameContent() is only called (from main) when running this app
|
||||
// standalone
|
||||
}
|
||||
@@ -90,15 +87,14 @@ public class ButtonDemo
|
||||
* only the demo content panel is used, the frame itself is never displayed,
|
||||
* so we can avoid this step.
|
||||
*/
|
||||
public void initFrameContent()
|
||||
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);
|
||||
add(closePanel, BorderLayout.SOUTH);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -108,19 +104,15 @@ public class ButtonDemo
|
||||
* 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()
|
||||
private void createContent()
|
||||
{
|
||||
if (content == null)
|
||||
{
|
||||
content = new JPanel(new BorderLayout());
|
||||
JPanel panel = new JPanel(new GridLayout(4, 1));
|
||||
panel.add(createButtonPanel());
|
||||
panel.add(createTogglePanel());
|
||||
panel.add(createCheckBoxPanel());
|
||||
panel.add(createRadioPanel());
|
||||
content.add(panel);
|
||||
}
|
||||
return content;
|
||||
setLayout(new BorderLayout());
|
||||
JPanel panel = new JPanel(new GridLayout(4, 1));
|
||||
panel.add(createButtonPanel());
|
||||
panel.add(createTogglePanel());
|
||||
panel.add(createCheckBoxPanel());
|
||||
panel.add(createRadioPanel());
|
||||
add(panel);
|
||||
}
|
||||
|
||||
private JPanel createButtonPanel()
|
||||
@@ -294,10 +286,34 @@ public class ButtonDemo
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
ButtonDemo app = new ButtonDemo("Button Demo");
|
||||
app.initFrameContent();
|
||||
app.pack();
|
||||
app.setVisible(true);
|
||||
SwingUtilities.invokeLater
|
||||
(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
ButtonDemo app = new ButtonDemo();
|
||||
app.initFrameContent();
|
||||
JFrame frame = new JFrame("ButtonDemo");
|
||||
frame.getContentPane().add(app);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a ButtonDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a ButtonDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new ButtonDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
-19
@@ -1,19 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<launchConfiguration type="org.eclipse.cdt.launch.localCLaunch">
|
||||
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_ID" value="org.eclipse.cdt.debug.mi.core.CDebugger"/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.protocol" value="mi"/>
|
||||
<booleanAttribute key="org.eclipse.cdt.debug.mi.core.STOP_ON_SOLIB_EVENTS" value="false"/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="run"/>
|
||||
<listAttribute key="org.eclipse.cdt.debug.mi.core.SOLIB_PATH"/>
|
||||
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
|
||||
<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_REGISTER_BOOKKEEPING" value="false"/>
|
||||
<booleanAttribute key="org.eclipse.cdt.debug.mi.core.AUTO_SOLIB" value="true"/>
|
||||
<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
|
||||
<booleanAttribute key="org.eclipse.cdt.launch.use_terminal" value="true"/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="jamvm"/>
|
||||
<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_VARIABLE_BOOKKEEPING" value="false"/>
|
||||
<stringAttribute key="org.eclipse.cdt.debug.mi.core.DEBUG_NAME" value="gdb"/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="src/jamvm"/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_ARGUMENTS" value="-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel gnu.classpath.examples.swing.Demo"/>
|
||||
<stringAttribute key="org.eclipse.cdt.debug.mi.core.GDB_INIT" value=""/>
|
||||
</launchConfiguration>
|
||||
@@ -37,17 +37,18 @@ import javax.swing.Icon;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JList;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.plaf.metal.MetalIconFactory;
|
||||
|
||||
/**
|
||||
* A simple demo showing various combo boxes in different states.
|
||||
*/
|
||||
public class ComboBoxDemo
|
||||
extends JFrame
|
||||
extends JPanel
|
||||
implements ActionListener
|
||||
{
|
||||
|
||||
@@ -69,7 +70,6 @@ public class ComboBoxDemo
|
||||
}
|
||||
}
|
||||
|
||||
private JPanel content;
|
||||
private JCheckBox comboState1;
|
||||
private JComboBox combo1;
|
||||
private JComboBox combo2;
|
||||
@@ -96,15 +96,11 @@ public class ComboBoxDemo
|
||||
|
||||
/**
|
||||
* Creates a new demo instance.
|
||||
*
|
||||
* @param title the frame title.
|
||||
*/
|
||||
public ComboBoxDemo(String title)
|
||||
public ComboBoxDemo()
|
||||
{
|
||||
super(title);
|
||||
JPanel content = createContent();
|
||||
// initFrameContent() is only called (from main) when running this app
|
||||
// standalone
|
||||
super();
|
||||
createContent();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -114,15 +110,14 @@ public class ComboBoxDemo
|
||||
* only the demo content panel is used, the frame itself is never displayed,
|
||||
* so we can avoid this step.
|
||||
*/
|
||||
public void initFrameContent()
|
||||
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);
|
||||
add(closePanel, BorderLayout.SOUTH);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -132,21 +127,17 @@ public class ComboBoxDemo
|
||||
* 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()
|
||||
private void createContent()
|
||||
{
|
||||
if (content == null)
|
||||
{
|
||||
content = new JPanel(new BorderLayout());
|
||||
JPanel panel = new JPanel(new GridLayout(6, 1));
|
||||
panel.add(createPanel1());
|
||||
panel.add(createPanel2());
|
||||
panel.add(createPanel3());
|
||||
panel.add(createPanel4());
|
||||
panel.add(createPanel5());
|
||||
panel.add(createPanel6());
|
||||
content.add(panel);
|
||||
}
|
||||
return content;
|
||||
setLayout(new BorderLayout());
|
||||
JPanel panel = new JPanel(new GridLayout(6, 1));
|
||||
panel.add(createPanel1());
|
||||
panel.add(createPanel2());
|
||||
panel.add(createPanel3());
|
||||
panel.add(createPanel4());
|
||||
panel.add(createPanel5());
|
||||
panel.add(createPanel6());
|
||||
add(panel);
|
||||
}
|
||||
|
||||
private JPanel createPanel1()
|
||||
@@ -362,17 +353,34 @@ public class ComboBoxDemo
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel());
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
ComboBoxDemo app = new ComboBoxDemo("ComboBox Demo");
|
||||
app.initFrameContent();
|
||||
app.pack();
|
||||
app.setVisible(true);
|
||||
SwingUtilities.invokeLater
|
||||
(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
ComboBoxDemo app = new ComboBoxDemo();
|
||||
app.initFrameContent();
|
||||
JFrame frame = new JFrame();
|
||||
frame.getContentPane().add(app);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a ComboBoxDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a ComboBoxDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new ComboBoxDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,82 @@
|
||||
/* DemoDesktop.java -- A custom desktop for the demo
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
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.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.classpath.examples.swing;
|
||||
|
||||
import java.awt.Graphics;
|
||||
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JDesktopPane;
|
||||
|
||||
/**
|
||||
* A customized Desktop for the GNU Classpath Swing demo that paints the
|
||||
* GNU Classpath Icon in the middle of the desktop.
|
||||
*
|
||||
* @author Roman Kennke (kennke@aicas.com)
|
||||
*/
|
||||
public class DemoDesktop
|
||||
extends JDesktopPane
|
||||
{
|
||||
|
||||
/**
|
||||
* The icon that's painted centered on the desktop.
|
||||
*/
|
||||
private ImageIcon image;
|
||||
|
||||
/**
|
||||
* Creates a new desktop.
|
||||
*/
|
||||
DemoDesktop()
|
||||
{
|
||||
super();
|
||||
String badge = "/gnu/classpath/examples/icons/badge.png";
|
||||
image = new ImageIcon(getClass().getResource(badge));
|
||||
}
|
||||
|
||||
/**
|
||||
* Paints the desktop including the icon.
|
||||
*
|
||||
* @param g the graphics to use for painting
|
||||
*/
|
||||
protected void paintComponent(Graphics g)
|
||||
{
|
||||
super.paintComponent(g);
|
||||
image.paintIcon(this, g, (getWidth() - image.getIconWidth()) / 2,
|
||||
(getHeight() - image.getIconHeight()) / 2);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
/* DemoFactory.java -- Creates components used as separate Swing demos
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
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.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.classpath.examples.swing;
|
||||
|
||||
import javax.swing.JComponent;
|
||||
|
||||
/**
|
||||
* Creates components used in the Swing demo as separate demos.
|
||||
*
|
||||
* @author Roman Kennke (kennke@aicas.de)
|
||||
*/
|
||||
public interface DemoFactory
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates the component that should be as demo application.
|
||||
*
|
||||
* @return the component that should be as demo application
|
||||
*/
|
||||
JComponent createDemo();
|
||||
}
|
||||
@@ -0,0 +1,289 @@
|
||||
/* DpocumentFilterDemo.java -- An example for the DocumentFilter 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.Color;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.datatransfer.Clipboard;
|
||||
import java.awt.datatransfer.StringSelection;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.text.AbstractDocument;
|
||||
import javax.swing.text.AttributeSet;
|
||||
import javax.swing.text.BadLocationException;
|
||||
import javax.swing.text.DocumentFilter;
|
||||
import javax.swing.text.TextAction;
|
||||
|
||||
/**
|
||||
* A demonstration of the <code>javax.swing.text.DocumentFilter</code> class.
|
||||
*
|
||||
* <p>Similar to a dialog in a popular programming IDE the user can insert
|
||||
* a CVS URL into a textfield and the filter will split the components apart
|
||||
* and will put them into the right textfields saving the user a lot of
|
||||
* typing time.</p>
|
||||
*
|
||||
* @author Robert Schuster
|
||||
*/
|
||||
public class DocumentFilterDemo
|
||||
extends JPanel
|
||||
implements ActionListener
|
||||
{
|
||||
JTextField target;
|
||||
|
||||
JTextField host;
|
||||
JTextField repositoryPath;
|
||||
JTextField user;
|
||||
JTextField password;
|
||||
JComboBox connectionType;
|
||||
|
||||
/**
|
||||
* Creates a new demo instance.
|
||||
*/
|
||||
public DocumentFilterDemo()
|
||||
{
|
||||
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());
|
||||
|
||||
JPanel panel = new JPanel(new GridLayout(7, 2));
|
||||
panel.add(new JLabel("CVS URL:"));
|
||||
panel.add(target = new JTextField(20));
|
||||
target.setBackground(Color.RED);
|
||||
|
||||
panel.add(new JLabel("Host:"));
|
||||
panel.add(host = new JTextField(20));
|
||||
|
||||
panel.add(new JLabel("Repository Path:"));
|
||||
panel.add(repositoryPath = new JTextField(20));
|
||||
|
||||
panel.add(new JLabel("Username:"));
|
||||
panel.add(user = new JTextField(20));
|
||||
|
||||
panel.add(new JLabel("Password:"));
|
||||
panel.add(password = new JTextField(20));
|
||||
|
||||
panel.add(new JLabel("Connection Type:"));
|
||||
panel.add(connectionType = new JComboBox());
|
||||
|
||||
JButton helpButton = new JButton("Help");
|
||||
panel.add(helpButton);
|
||||
|
||||
helpButton.addActionListener(new ActionListener()
|
||||
{
|
||||
public void actionPerformed(ActionEvent ae)
|
||||
{
|
||||
JOptionPane.showMessageDialog(DocumentFilterDemo.this,
|
||||
"Paste a CVS URL into the red " +
|
||||
"textfield.\nIf you do not want to " +
|
||||
"look up a CVS URL yourself click " +
|
||||
"on the 'provide me an example' " +
|
||||
"button.\nThis will paste a proper " +
|
||||
"string into your clipboard.");
|
||||
}
|
||||
});
|
||||
|
||||
JButton exampleButton = new JButton("Provide me an example!");
|
||||
panel.add(exampleButton);
|
||||
exampleButton.addActionListener(new ActionListener()
|
||||
{
|
||||
public void actionPerformed(ActionEvent ae)
|
||||
{
|
||||
try
|
||||
{
|
||||
Toolkit tk = Toolkit.getDefaultToolkit();
|
||||
Clipboard cb = tk.getSystemSelection();
|
||||
StringSelection selection
|
||||
= new StringSelection(":extssh:gnu@cvs.savannah.gnu.org:" +
|
||||
"/cvs/example/project");
|
||||
|
||||
cb.setContents(selection, selection);
|
||||
|
||||
// Confirm success with a beep.
|
||||
tk.beep();
|
||||
}
|
||||
catch (IllegalStateException ise)
|
||||
{
|
||||
JOptionPane.showMessageDialog(DocumentFilterDemo.this,
|
||||
"Clipboard is currently" +
|
||||
" unavailable.",
|
||||
"Error",
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
connectionType.addItem("pserver");
|
||||
connectionType.addItem("ext");
|
||||
connectionType.addItem("extssh");
|
||||
|
||||
add(panel);
|
||||
|
||||
AbstractDocument doc = (AbstractDocument) target.getDocument();
|
||||
doc.setDocumentFilter(new CVSFilter());
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
DocumentFilterDemo app = new DocumentFilterDemo();
|
||||
app.initFrameContent();
|
||||
JFrame frame = new JFrame("DocumentFilterDemo");
|
||||
frame.getContentPane().add(app);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a DocumentFilterDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a DocumentFilterDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new DocumentFilterDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
class CVSFilter extends DocumentFilter
|
||||
{
|
||||
// example: pserver:anonymous@cvs.sourceforge.net:/cvsroot/fmj
|
||||
String cvsPattern = ":?(pserver|ext|extssh):(\\w)+(:(\\w)+)?@(\\w|\\.)+:/(\\w|/)*";
|
||||
|
||||
public void insertString(DocumentFilter.FilterBypass fb,
|
||||
int offset, String string,
|
||||
AttributeSet attr)
|
||||
throws BadLocationException
|
||||
{
|
||||
filterString(fb, offset, 0, string, attr, true);
|
||||
}
|
||||
|
||||
public void replace(DocumentFilter.FilterBypass fb,
|
||||
int offset, int length,
|
||||
String string,
|
||||
AttributeSet attr)
|
||||
throws BadLocationException
|
||||
{
|
||||
filterString(fb, offset, length, string, attr, false);
|
||||
}
|
||||
|
||||
public void filterString(DocumentFilter.FilterBypass fb,
|
||||
int offset, int length, String string,
|
||||
AttributeSet attr, boolean insertion)
|
||||
throws BadLocationException
|
||||
{
|
||||
if(string.matches(cvsPattern))
|
||||
{
|
||||
// Split off the connection type part.
|
||||
String[] result = string.split(":", 2);
|
||||
|
||||
// If the string contained a leading colon, result[0]
|
||||
// will be empty at that point. We simply repeat the split
|
||||
// operation on the remaining string and continue.
|
||||
if(result[0].equals(""))
|
||||
result = result[1].split(":", 2);
|
||||
|
||||
connectionType.setSelectedItem(result[0]);
|
||||
|
||||
// Split off the username and password part
|
||||
result = result[1].split("@", 2);
|
||||
|
||||
// Break username and password in half
|
||||
String[] userCredentials = result[0].split(":");
|
||||
user.setText(userCredentials[0]);
|
||||
|
||||
// If the result has two entries the second one will
|
||||
// be the password.
|
||||
if (userCredentials.length == 2)
|
||||
password.setText(userCredentials[1]);
|
||||
|
||||
// Now break the host part apart.
|
||||
result = result[1].split(":");
|
||||
|
||||
host.setText(result[0]);
|
||||
|
||||
repositoryPath.setText(result[1]);
|
||||
}
|
||||
|
||||
// The unmodified string is put into the document.
|
||||
if (insertion)
|
||||
fb.insertString(offset, string, attr);
|
||||
else
|
||||
fb.replace(offset, length, string, attr);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -30,19 +30,23 @@ import java.io.File;
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.DefaultListModel;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JList;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.filechooser.FileFilter;
|
||||
|
||||
/**
|
||||
* A simple demo showing the {@link JFileChooser} component used in different
|
||||
* ways.
|
||||
*/
|
||||
public class FileChooserDemo extends JFrame implements ActionListener
|
||||
public class FileChooserDemo
|
||||
extends JPanel
|
||||
implements ActionListener
|
||||
{
|
||||
/**
|
||||
* A file filter for Java source files.
|
||||
@@ -64,8 +68,6 @@ public class FileChooserDemo extends JFrame implements ActionListener
|
||||
}
|
||||
}
|
||||
|
||||
private JPanel content;
|
||||
|
||||
/** A label to display the selected file. */
|
||||
JLabel selectedFileLabel;
|
||||
|
||||
@@ -80,15 +82,11 @@ public class FileChooserDemo extends JFrame implements ActionListener
|
||||
|
||||
/**
|
||||
* Creates a new demo instance.
|
||||
*
|
||||
* @param frameTitle the frame title.
|
||||
*/
|
||||
public FileChooserDemo(String frameTitle)
|
||||
public FileChooserDemo()
|
||||
{
|
||||
super(frameTitle);
|
||||
JPanel content = createContent();
|
||||
// initFrameContent() is only called (from main) when running this app
|
||||
// standalone
|
||||
super();
|
||||
createContent();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -98,15 +96,14 @@ public class FileChooserDemo extends JFrame implements ActionListener
|
||||
* only the demo content panel is used, the frame itself is never displayed,
|
||||
* so we can avoid this step.
|
||||
*/
|
||||
public void initFrameContent()
|
||||
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);
|
||||
add(closePanel, BorderLayout.SOUTH);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -116,57 +113,52 @@ public class FileChooserDemo extends JFrame implements ActionListener
|
||||
* 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()
|
||||
private void createContent()
|
||||
{
|
||||
if (content == null)
|
||||
{
|
||||
JPanel panel = new JPanel(new BorderLayout());
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
// create a panel of buttons to select the different styles of file
|
||||
// chooser...
|
||||
JPanel buttonPanel = new JPanel(new GridLayout(5, 1));
|
||||
JButton openButton = new JButton("Open...");
|
||||
openButton.setActionCommand("OPEN");
|
||||
openButton.addActionListener(this);
|
||||
buttonPanel.add(openButton);
|
||||
JButton saveButton = new JButton("Save...");
|
||||
saveButton.setActionCommand("SAVE");
|
||||
saveButton.addActionListener(this);
|
||||
buttonPanel.add(saveButton);
|
||||
JButton queryButton = new JButton("Select Directory...");
|
||||
queryButton.setActionCommand("SELECT_DIRECTORY");
|
||||
queryButton.addActionListener(this);
|
||||
buttonPanel.add(queryButton);
|
||||
JButton openJavaButton = new JButton("Open Java file...");
|
||||
openJavaButton.setActionCommand("OPEN_JAVA");
|
||||
openJavaButton.addActionListener(this);
|
||||
buttonPanel.add(openJavaButton);
|
||||
JButton openMultiButton = new JButton("Open multiple files...");
|
||||
openMultiButton.setActionCommand("OPEN_MULTI");
|
||||
openMultiButton.addActionListener(this);
|
||||
buttonPanel.add(openMultiButton);
|
||||
panel.add(buttonPanel, BorderLayout.WEST);
|
||||
// create a panel of buttons to select the different styles of file
|
||||
// chooser...
|
||||
JPanel buttonPanel = new JPanel(new GridLayout(5, 1));
|
||||
JButton openButton = new JButton("Open...");
|
||||
openButton.setActionCommand("OPEN");
|
||||
openButton.addActionListener(this);
|
||||
buttonPanel.add(openButton);
|
||||
JButton saveButton = new JButton("Save...");
|
||||
saveButton.setActionCommand("SAVE");
|
||||
saveButton.addActionListener(this);
|
||||
buttonPanel.add(saveButton);
|
||||
JButton queryButton = new JButton("Select Directory...");
|
||||
queryButton.setActionCommand("SELECT_DIRECTORY");
|
||||
queryButton.addActionListener(this);
|
||||
buttonPanel.add(queryButton);
|
||||
JButton openJavaButton = new JButton("Open Java file...");
|
||||
openJavaButton.setActionCommand("OPEN_JAVA");
|
||||
openJavaButton.addActionListener(this);
|
||||
buttonPanel.add(openJavaButton);
|
||||
JButton openMultiButton = new JButton("Open multiple files...");
|
||||
openMultiButton.setActionCommand("OPEN_MULTI");
|
||||
openMultiButton.addActionListener(this);
|
||||
buttonPanel.add(openMultiButton);
|
||||
add(buttonPanel, BorderLayout.WEST);
|
||||
|
||||
// create a panel to display the selected file(s) and the return code
|
||||
JPanel displayPanel = new JPanel(new BorderLayout());
|
||||
// create a panel to display the selected file(s) and the return code
|
||||
JPanel displayPanel = new JPanel(new BorderLayout());
|
||||
|
||||
selectedFileLabel = new JLabel("-");
|
||||
selectedFileLabel.setBorder(BorderFactory.createTitledBorder("Selected File/Directory: "));
|
||||
displayPanel.add(selectedFileLabel, BorderLayout.NORTH);
|
||||
selectedFileLabel = new JLabel("-");
|
||||
selectedFileLabel.setBorder(BorderFactory.createTitledBorder("Selected File/Directory: "));
|
||||
displayPanel.add(selectedFileLabel, BorderLayout.NORTH);
|
||||
|
||||
selectedFilesList = new JList();
|
||||
JScrollPane sp = new JScrollPane(selectedFilesList);
|
||||
sp.setBorder(BorderFactory.createTitledBorder("Selected Files: "));
|
||||
displayPanel.add(sp);
|
||||
selectedFilesList = new JList();
|
||||
JScrollPane sp = new JScrollPane(selectedFilesList);
|
||||
sp.setBorder(BorderFactory.createTitledBorder("Selected Files: "));
|
||||
displayPanel.add(sp);
|
||||
|
||||
returnCodeLabel = new JLabel("0");
|
||||
returnCodeLabel.setBorder(BorderFactory.createTitledBorder("Return Code:"));
|
||||
displayPanel.add(returnCodeLabel, BorderLayout.SOUTH);
|
||||
returnCodeLabel = new JLabel("0");
|
||||
returnCodeLabel.setBorder(BorderFactory.createTitledBorder("Return Code:"));
|
||||
displayPanel.add(returnCodeLabel, BorderLayout.SOUTH);
|
||||
|
||||
panel.add(displayPanel);
|
||||
content = panel;
|
||||
}
|
||||
return content;
|
||||
add(displayPanel);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -239,10 +231,34 @@ public class FileChooserDemo extends JFrame implements ActionListener
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
FileChooserDemo app = new FileChooserDemo("File Chooser Demo");
|
||||
app.initFrameContent();
|
||||
app.pack();
|
||||
app.setVisible(true);
|
||||
SwingUtilities.invokeLater
|
||||
(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
FileChooserDemo app = new FileChooserDemo();
|
||||
app.initFrameContent();
|
||||
JFrame frame = new JFrame("FileChooser Demo");
|
||||
frame.getContentPane().add(app);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a FileChooserDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a FileChooserDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new FileChooserDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,265 +0,0 @@
|
||||
/* GNULookAndFeel.java -- An example of using the javax.swing UI.
|
||||
Copyright (C) 2005 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.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Graphics;
|
||||
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JRadioButton;
|
||||
import javax.swing.UIDefaults;
|
||||
import javax.swing.plaf.ColorUIResource;
|
||||
import javax.swing.plaf.IconUIResource;
|
||||
import javax.swing.plaf.basic.BasicLookAndFeel;
|
||||
|
||||
public class GNULookAndFeel extends BasicLookAndFeel
|
||||
{
|
||||
|
||||
static Color blueGray = new Color(0xdc, 0xda, 0xd5);
|
||||
|
||||
public boolean isNativeLookAndFeel() { return true; }
|
||||
public boolean isSupportedLookAndFeel() { return true; }
|
||||
public String getDescription() { return "GNU Look and Feel"; }
|
||||
public String getID() { return "GNULookAndFeel"; }
|
||||
public String getName() { return "GNU"; }
|
||||
|
||||
static UIDefaults LAF_defaults;
|
||||
|
||||
private final static String iconspath = "/gnu/javax/swing/plaf/gtk/icons/";
|
||||
|
||||
public UIDefaults getDefaults()
|
||||
{
|
||||
if (LAF_defaults == null)
|
||||
{
|
||||
LAF_defaults = super.getDefaults();
|
||||
Object[] myDefaults = new Object[] {
|
||||
"Button.background", new ColorUIResource(blueGray),
|
||||
"CheckBox.background", new ColorUIResource(blueGray),
|
||||
"CheckBoxMenuItem.background", new ColorUIResource(blueGray),
|
||||
"ToolBar.background", new ColorUIResource(blueGray),
|
||||
"Panel.background", new ColorUIResource(blueGray),
|
||||
"Slider.background", new ColorUIResource(blueGray),
|
||||
"OptionPane.background", new ColorUIResource(blueGray),
|
||||
"ProgressBar.background", new ColorUIResource(blueGray),
|
||||
"TabbedPane.background", new ColorUIResource(blueGray),
|
||||
"Label.background", new ColorUIResource(blueGray),
|
||||
"Menu.background", new ColorUIResource(blueGray),
|
||||
"MenuBar.background", new ColorUIResource(blueGray),
|
||||
"MenuItem.background", new ColorUIResource(blueGray),
|
||||
"ScrollBar.background", new ColorUIResource(blueGray),
|
||||
"CheckBox.icon", new CheckBoxIcon(),
|
||||
"RadioButton.icon", new RadioButtonIcon(),
|
||||
|
||||
"Tree.closedIcon",
|
||||
new IconUIResource(new ImageIcon
|
||||
(getClass().getResource
|
||||
(iconspath + "TreeClosed.png"))),
|
||||
"Tree.leafIcon",
|
||||
new IconUIResource(new ImageIcon
|
||||
(getClass().getResource
|
||||
(iconspath + "TreeLeaf.png"))),
|
||||
"Tree.openIcon",
|
||||
new IconUIResource(new ImageIcon
|
||||
(getClass().getResource
|
||||
(iconspath + "TreeOpen.png"))),
|
||||
};
|
||||
LAF_defaults.putDefaults(myDefaults);
|
||||
}
|
||||
return LAF_defaults;
|
||||
}
|
||||
|
||||
/**
|
||||
* The icon used for CheckBoxes in the BasicLookAndFeel. This is an empty
|
||||
* icon with a size of 13x13 pixels.
|
||||
*/
|
||||
static class CheckBoxIcon
|
||||
implements Icon
|
||||
{
|
||||
/**
|
||||
* Returns the height of the icon. The BasicLookAndFeel CheckBox icon
|
||||
* has a height of 13 pixels.
|
||||
*
|
||||
* @return the height of the icon
|
||||
*/
|
||||
public int getIconHeight()
|
||||
{
|
||||
return 13;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the width of the icon. The BasicLookAndFeel CheckBox icon
|
||||
* has a width of 13 pixels.
|
||||
*
|
||||
* @return the height of the icon
|
||||
*/
|
||||
public int getIconWidth()
|
||||
{
|
||||
return 13;
|
||||
}
|
||||
|
||||
/**
|
||||
* Paints the icon. The BasicLookAndFeel CheckBox icon is empty and does
|
||||
* not need to be painted.
|
||||
*
|
||||
* @param c the component to be painted
|
||||
* @param g the Graphics context to be painted with
|
||||
* @param x the x position of the icon
|
||||
* @param y the y position of the icon
|
||||
*/
|
||||
public void paintIcon(Component c, Graphics g, int x, int y)
|
||||
{
|
||||
Color save = g.getColor();
|
||||
g.setColor(c.getForeground());
|
||||
g.drawRect(x, y, getIconWidth(), getIconHeight());
|
||||
|
||||
JCheckBox item = (JCheckBox) c;
|
||||
if (item.isSelected())
|
||||
{
|
||||
g.drawLine(3 + x, 5 + y, 3 + x, 9 + y);
|
||||
g.drawLine(4 + x, 5 + y, 4 + x, 9 + y);
|
||||
g.drawLine(5 + x, 7 + y, 9 + x, 3 + y);
|
||||
g.drawLine(5 + x, 8 + y, 9 + x, 4 + y);
|
||||
}
|
||||
|
||||
g.setColor(save);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The icon used for RadioButtons in the GNULookAndFeel. This is an empty
|
||||
* icon with a size of 13x13 pixels.
|
||||
*/
|
||||
static class RadioButtonIcon
|
||||
implements Icon
|
||||
{
|
||||
/**
|
||||
* Returns the height of the icon. The GNULookAndFeel RadioButton icon
|
||||
* has a height of 13 pixels.
|
||||
*
|
||||
* @return the height of the icon
|
||||
*/
|
||||
public int getIconHeight()
|
||||
{
|
||||
return 13;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the width of the icon. The GNULookAndFeel RadioButton icon
|
||||
* has a width of 13 pixels.
|
||||
*
|
||||
* @return the height of the icon
|
||||
*/
|
||||
public int getIconWidth()
|
||||
{
|
||||
return 13;
|
||||
}
|
||||
|
||||
/**
|
||||
* Paints the icon. The GNULookAndFeel RadioButton icon is empty and does
|
||||
* not need to be painted.
|
||||
*
|
||||
* @param c the component to be painted
|
||||
* @param g the Graphics context to be painted with
|
||||
* @param x the x position of the icon
|
||||
* @param y the y position of the icon
|
||||
*/
|
||||
public void paintIcon(Component c, Graphics g, int x, int y)
|
||||
{
|
||||
Color savedColor = g.getColor();
|
||||
JRadioButton b = (JRadioButton) c;
|
||||
|
||||
// draw outer circle
|
||||
if (b.isEnabled())
|
||||
g.setColor(Color.GRAY);
|
||||
else
|
||||
g.setColor(Color.GRAY);
|
||||
g.drawLine(x + 2, y + 1, x + 3, y + 1);
|
||||
g.drawLine(x + 4, y, x + 7, y);
|
||||
g.drawLine(x + 8, y + 1, x + 9, y + 1);
|
||||
g.drawLine(x + 10, y + 2, x + 10, y + 3);
|
||||
g.drawLine(x + 11, y + 4, x + 11, y + 7);
|
||||
g.drawLine(x + 10, y + 8, x + 10, y + 9);
|
||||
g.drawLine(x + 8, y + 10, x + 9, y + 10);
|
||||
g.drawLine(x + 4, y + 11, x + 7, y + 11);
|
||||
g.drawLine(x + 2, y + 10, x + 3, y + 10);
|
||||
g.drawLine(x + 1, y + 9, x + 1, y + 8);
|
||||
g.drawLine(x, y + 7, x, y + 4);
|
||||
g.drawLine(x + 1, y + 2, x + 1, y + 3);
|
||||
|
||||
if (b.getModel().isArmed())
|
||||
{
|
||||
g.setColor(Color.GRAY);
|
||||
g.drawLine(x + 4, y + 1, x + 7, y + 1);
|
||||
g.drawLine(x + 4, y + 10, x + 7, y + 10);
|
||||
g.drawLine(x + 1, y + 4, x + 1, y + 7);
|
||||
g.drawLine(x + 10, y + 4, x + 10, y + 7);
|
||||
g.fillRect(x + 2, y + 2, 8, 8);
|
||||
}
|
||||
else
|
||||
{
|
||||
// only draw inner highlight if not filled
|
||||
if (b.isEnabled())
|
||||
{
|
||||
g.setColor(Color.WHITE);
|
||||
|
||||
g.drawLine(x + 2, y + 8, x + 2, y + 9);
|
||||
g.drawLine(x + 1, y + 4, x + 1, y + 7);
|
||||
g.drawLine(x + 2, y + 2, x + 2, y + 3);
|
||||
g.drawLine(x + 3, y + 2, x + 3, y + 2);
|
||||
g.drawLine(x + 4, y + 1, x + 7, y + 1);
|
||||
g.drawLine(x + 8, y + 2, x + 9, y + 2);
|
||||
}
|
||||
}
|
||||
|
||||
// draw outer highlight
|
||||
if (b.isEnabled())
|
||||
{
|
||||
g.setColor(Color.WHITE);
|
||||
|
||||
// outer
|
||||
g.drawLine(x + 10, y + 1, x + 10, y + 1);
|
||||
g.drawLine(x + 11, y + 2, x + 11, y + 3);
|
||||
g.drawLine(x + 12, y + 4, x + 12, y + 7);
|
||||
g.drawLine(x + 11, y + 8, x + 11, y + 9);
|
||||
g.drawLine(x + 10, y + 10, x + 10, y + 10);
|
||||
g.drawLine(x + 8, y + 11, x + 9, y + 11);
|
||||
g.drawLine(x + 4, y + 12, x + 7, y + 12);
|
||||
g.drawLine(x + 2, y + 11, x + 3, y + 11);
|
||||
}
|
||||
|
||||
if (b.isSelected())
|
||||
{
|
||||
if (b.isEnabled())
|
||||
g.setColor(Color.BLACK);
|
||||
else
|
||||
g.setColor(Color.GRAY);
|
||||
g.drawLine(x + 4, y + 3, x + 7, y + 3);
|
||||
g.fillRect(x + 3, y + 4, 6, 4);
|
||||
g.drawLine(x + 4, y + 8, x + 7, y + 8);
|
||||
}
|
||||
g.setColor(savedColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,231 @@
|
||||
/* ListDemo.java -- Demostrates JList
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
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.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.classpath.examples.swing;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Component;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.DefaultListCellRenderer;
|
||||
import javax.swing.DefaultListModel;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JList;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JSplitPane;
|
||||
import javax.swing.ListCellRenderer;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
public class ListDemo
|
||||
extends JPanel
|
||||
implements ActionListener
|
||||
{
|
||||
|
||||
private static class LabelCellRenderer
|
||||
extends DefaultListCellRenderer
|
||||
{
|
||||
public Component getListCellRendererComponent(JList list,
|
||||
Object value,
|
||||
int index,
|
||||
boolean isSelected,
|
||||
boolean cellHasFocus)
|
||||
{
|
||||
Component c = super.getListCellRendererComponent(list, value, index,
|
||||
isSelected,
|
||||
cellHasFocus);
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
||||
private static class CheckCellRenderer
|
||||
extends JCheckBox
|
||||
implements ListCellRenderer
|
||||
{
|
||||
public Component getListCellRendererComponent(JList list,
|
||||
Object value,
|
||||
int index,
|
||||
boolean isSelected,
|
||||
boolean cellHasFocus)
|
||||
{
|
||||
setSelected(isSelected);
|
||||
setText(value.toString());
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
ListDemo()
|
||||
{
|
||||
super();
|
||||
createContent();
|
||||
}
|
||||
|
||||
private void createContent()
|
||||
{
|
||||
|
||||
String foo[] = new String[] {
|
||||
"non alcoholic ",
|
||||
"carbonated ",
|
||||
"malted ",
|
||||
"fresh squeezed ",
|
||||
"imported ",
|
||||
"high fructose ",
|
||||
"enriched "
|
||||
};
|
||||
|
||||
String bar[] = new String[] {
|
||||
"orange juice",
|
||||
"ginger beer",
|
||||
"yak milk",
|
||||
"corn syrup",
|
||||
"herbal remedy"
|
||||
};
|
||||
|
||||
final DefaultListModel mod = new DefaultListModel();
|
||||
final JList list1 = new JList(mod);
|
||||
final JList list2 = new JList(mod);
|
||||
|
||||
list2.setSelectionModel(list1.getSelectionModel());
|
||||
for (int i = 0; i < bar.length; ++i)
|
||||
for (int j = 0; j < foo.length; ++j)
|
||||
mod.addElement(foo[j] + bar[i]);
|
||||
|
||||
list1.setCellRenderer(new LabelCellRenderer());
|
||||
list2.setCellRenderer(new CheckCellRenderer());
|
||||
|
||||
JButton add = new JButton("add element");
|
||||
add.addActionListener(new ActionListener()
|
||||
{
|
||||
int i = 0;
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
mod.addElement("new element " + i);
|
||||
++i;
|
||||
}
|
||||
});
|
||||
|
||||
JButton del = new JButton("delete selected");
|
||||
del.addActionListener(new ActionListener()
|
||||
{
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
for (int i = 0; i < mod.getSize(); ++i)
|
||||
if (list1.isSelectedIndex(i))
|
||||
mod.remove(i);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
JSplitPane splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
|
||||
splitter.add(new JScrollPane(list1), JSplitPane.LEFT);
|
||||
splitter.add(new JScrollPane(list2), JSplitPane.RIGHT);
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
JPanel p2 = new JPanel();
|
||||
p2.setLayout(new GridLayout(1, 2));
|
||||
p2.add(add);
|
||||
p2.add(del);
|
||||
|
||||
add(p2, BorderLayout.NORTH);
|
||||
add(splitter, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
if (e.getActionCommand().equals("CLOSE"))
|
||||
{
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
SwingUtilities.invokeLater
|
||||
(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
ListDemo app = new ListDemo();
|
||||
app.initFrameContent();
|
||||
JFrame frame = new JFrame("List Demo");
|
||||
frame.getContentPane().add(app);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a ListDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a ListDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new ListDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,585 @@
|
||||
/* MetalThemeEditor.java -- Edit themes using this application
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
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.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.classpath.examples.swing;
|
||||
|
||||
import gnu.javax.swing.plaf.metal.CustomizableTheme;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.GridBagConstraints;
|
||||
import java.awt.GridBagLayout;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Window;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.Writer;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JColorChooser;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.plaf.metal.MetalLookAndFeel;
|
||||
|
||||
/**
|
||||
* This application serves two purposes: 1. demonstrate the color chooser
|
||||
* component, 2. make creating new Metal themes as easy as possible.
|
||||
*
|
||||
* @author Roman Kennke (kennke@aicas.com)
|
||||
*/
|
||||
public class MetalThemeEditor
|
||||
extends JPanel
|
||||
{
|
||||
/**
|
||||
* An icon to display a chosen color in a button.
|
||||
*/
|
||||
private class ColorIcon implements Icon
|
||||
{
|
||||
/**
|
||||
* The color to be shown on the icon.
|
||||
*/
|
||||
Color color;
|
||||
|
||||
/**
|
||||
* Creates a new ColorIcon.
|
||||
*
|
||||
* @param c the color to be displayed
|
||||
*/
|
||||
ColorIcon(Color c)
|
||||
{
|
||||
color = c;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the icon height, which is 10.
|
||||
*
|
||||
* @return 10
|
||||
*/
|
||||
public int getIconHeight()
|
||||
{
|
||||
return 10;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the icon width, which is 30.
|
||||
*
|
||||
* @return 30
|
||||
*/
|
||||
public int getIconWidth()
|
||||
{
|
||||
return 30;
|
||||
}
|
||||
|
||||
/**
|
||||
* Paints the icon.
|
||||
*
|
||||
* @param c the component to paint on
|
||||
* @param g the graphics to use
|
||||
* @param x the x location
|
||||
* @param y the y location
|
||||
*/
|
||||
public void paintIcon(Component c, Graphics g, int x, int y)
|
||||
{
|
||||
g.setColor(color);
|
||||
g.fillRect(x, y, 30, 10);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens up a color chooser and lets the user select a color for the theme.
|
||||
*/
|
||||
private class ChooseColorAction implements ActionListener
|
||||
{
|
||||
|
||||
/**
|
||||
* The button that will get updated when a new color is selected.
|
||||
*/
|
||||
private JButton button;
|
||||
|
||||
/**
|
||||
* Specifies which color of the theme should be updated. See constants in
|
||||
* the MetalThemeEditor class.
|
||||
*/
|
||||
private int colorType;
|
||||
|
||||
/**
|
||||
* Creates a new ChooseColorAction. The specified button will have its
|
||||
* icon updated to the new color if appropriate.
|
||||
*
|
||||
* @param b the button to update
|
||||
* @param type the color type to update
|
||||
*/
|
||||
ChooseColorAction(JButton b, int type)
|
||||
{
|
||||
button = b;
|
||||
colorType = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens a color chooser and lets the user select a color.
|
||||
*/
|
||||
public void actionPerformed(ActionEvent event)
|
||||
{
|
||||
Color c = JColorChooser.showDialog(button, "Choose a color",
|
||||
getColor(colorType));
|
||||
if (c != null)
|
||||
{
|
||||
setColor(colorType, c);
|
||||
button.setIcon(new ColorIcon(c));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Denotes the primary1 color of the theme.
|
||||
*/
|
||||
private static final int PRIMARY1 = 0;
|
||||
|
||||
/**
|
||||
* Denotes the primary2 color of the theme.
|
||||
*/
|
||||
private static final int PRIMARY2 = 1;
|
||||
|
||||
/**
|
||||
* Denotes the primary3 color of the theme.
|
||||
*/
|
||||
private static final int PRIMARY3 = 2;
|
||||
|
||||
/**
|
||||
* Denotes the secondary1 color of the theme.
|
||||
*/
|
||||
private static final int SECONDARY1 = 3;
|
||||
|
||||
/**
|
||||
* Denotes the secondary2 color of the theme.
|
||||
*/
|
||||
private static final int SECONDARY2 = 4;
|
||||
|
||||
/**
|
||||
* Denotes the secondary3 color of the theme.
|
||||
*/
|
||||
private static final int SECONDARY3 = 5;
|
||||
|
||||
/**
|
||||
* The theme that is edited.
|
||||
*/
|
||||
CustomizableTheme theme;
|
||||
|
||||
/**
|
||||
* Creates a new instance of the MetalThemeEditor.
|
||||
*/
|
||||
MetalThemeEditor()
|
||||
{
|
||||
theme = new CustomizableTheme();
|
||||
setBorder(BorderFactory.createEmptyBorder(12, 12, 11, 11));
|
||||
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
|
||||
add(createConfigurationPanel());
|
||||
add(Box.createVerticalStrut(17));
|
||||
add(createButtonPanel());
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the main panel of the MetalThemeEditor. This is the upper
|
||||
* area where the colors can be selected.
|
||||
*
|
||||
* @return the main panel
|
||||
*/
|
||||
private JPanel createConfigurationPanel()
|
||||
{
|
||||
JPanel p = new JPanel();
|
||||
p.setLayout(new GridBagLayout());
|
||||
GridBagConstraints c = new GridBagConstraints();
|
||||
c.weightx = 1;
|
||||
c.weighty = 0;
|
||||
c.fill = GridBagConstraints.HORIZONTAL;
|
||||
Insets labelInsets = new Insets(0, 0, 11, 6);
|
||||
Insets buttonInsets = new Insets(0, 0, 11, 0);
|
||||
|
||||
// Primary 1
|
||||
JLabel primary1Label = new JLabel("Primary 1:");
|
||||
c.gridx = 0;
|
||||
c.gridy = 0;
|
||||
c.insets = labelInsets;
|
||||
p.add(primary1Label, c);
|
||||
|
||||
Icon p1Icon = new ColorIcon(theme.getPrimary1());
|
||||
JButton primary1Button = new JButton(p1Icon);
|
||||
primary1Button.addActionListener(new ChooseColorAction(primary1Button,
|
||||
PRIMARY1));
|
||||
//c.weightx = 0;
|
||||
c.gridx = 1;
|
||||
c.insets = buttonInsets;
|
||||
p.add(primary1Button, c);
|
||||
primary1Label.setLabelFor(primary1Button);
|
||||
|
||||
// Primary 2
|
||||
JLabel primary2Label = new JLabel("Primary 2:");
|
||||
c.gridx = 0;
|
||||
c.gridy = 1;
|
||||
c.insets = labelInsets;
|
||||
p.add(primary2Label, c);
|
||||
|
||||
Icon p2Icon = new ColorIcon(theme.getPrimary2());
|
||||
JButton primary2Button = new JButton(p2Icon);
|
||||
primary2Button.addActionListener(new ChooseColorAction(primary2Button,
|
||||
PRIMARY2));
|
||||
c.gridx = 1;
|
||||
c.insets = buttonInsets;
|
||||
p.add(primary2Button, c);
|
||||
primary2Label.setLabelFor(primary2Button);
|
||||
|
||||
// Primary 3
|
||||
JLabel primary3Label = new JLabel("Primary 3:");
|
||||
c.gridx = 0;
|
||||
c.gridy = 2;
|
||||
c.insets = labelInsets;
|
||||
p.add(primary3Label, c);
|
||||
|
||||
Icon p3Icon = new ColorIcon(theme.getPrimary3());
|
||||
JButton primary3Button = new JButton(p3Icon);
|
||||
primary3Button.addActionListener(new ChooseColorAction(primary3Button,
|
||||
PRIMARY3));
|
||||
c.gridx = 1;
|
||||
c.insets = buttonInsets;
|
||||
p.add(primary3Button, c);
|
||||
primary3Label.setLabelFor(primary3Button);
|
||||
|
||||
// Secondary 1
|
||||
JLabel secondary1Label = new JLabel("Secondary 1:");
|
||||
c.gridx = 0;
|
||||
c.gridy = 3;
|
||||
c.insets = labelInsets;
|
||||
p.add(secondary1Label, c);
|
||||
|
||||
Icon s1Icon = new ColorIcon(theme.getSecondary1());
|
||||
JButton secondary1Button = new JButton(s1Icon);
|
||||
secondary1Button.addActionListener(new ChooseColorAction(secondary1Button,
|
||||
SECONDARY1));
|
||||
c.gridx = 1;
|
||||
c.insets = buttonInsets;
|
||||
p.add(secondary1Button, c);
|
||||
secondary1Label.setLabelFor(secondary1Button);
|
||||
|
||||
// Secondary 2
|
||||
JLabel secondary2Label = new JLabel("Secondary 2:");
|
||||
c.gridx = 0;
|
||||
c.gridy = 4;
|
||||
c.insets = labelInsets;
|
||||
p.add(secondary2Label, c);
|
||||
|
||||
Icon s2Icon = new ColorIcon(theme.getSecondary2());
|
||||
JButton secondary2Button = new JButton(s2Icon);
|
||||
secondary2Button.addActionListener(new ChooseColorAction(secondary2Button,
|
||||
SECONDARY2));
|
||||
c.gridx = 1;
|
||||
c.insets = buttonInsets;
|
||||
p.add(secondary2Button, c);
|
||||
secondary2Label.setLabelFor(secondary2Button);
|
||||
|
||||
// Secondary 3
|
||||
JLabel secondary3Label = new JLabel("Secondary 3:");
|
||||
c.gridx = 0;
|
||||
c.gridy = 5;
|
||||
c.insets = labelInsets;
|
||||
p.add(secondary3Label, c);
|
||||
|
||||
Icon s3Icon = new ColorIcon(theme.getSecondary3());
|
||||
JButton secondary3Button = new JButton(s3Icon);
|
||||
secondary3Button.addActionListener(new ChooseColorAction(secondary3Button,
|
||||
SECONDARY3));
|
||||
c.gridx = 1;
|
||||
c.insets = buttonInsets;
|
||||
p.add(secondary3Button, c);
|
||||
secondary3Label.setLabelFor(secondary3Button);
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the button panel at the bottom of the MetalThemeEditor.
|
||||
*
|
||||
* @return the button panel
|
||||
*/
|
||||
private JPanel createButtonPanel()
|
||||
{
|
||||
JPanel p = new JPanel();
|
||||
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
|
||||
p.add(Box.createHorizontalGlue());
|
||||
|
||||
JButton applyButton = new JButton("Apply");
|
||||
applyButton.addActionListener
|
||||
(new ActionListener()
|
||||
{
|
||||
public void actionPerformed(ActionEvent ev)
|
||||
{
|
||||
try
|
||||
{
|
||||
CustomizableTheme copy = (CustomizableTheme) theme.clone();
|
||||
MetalLookAndFeel.setCurrentTheme(copy);
|
||||
UIManager.setLookAndFeel(new MetalLookAndFeel());
|
||||
Window w = SwingUtilities.getWindowAncestor(MetalThemeEditor.this);
|
||||
SwingUtilities.updateComponentTreeUI(w);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
p.add(applyButton);
|
||||
|
||||
p.add(Box.createHorizontalStrut(5));
|
||||
|
||||
JButton exportButton = new JButton("Export as Java File");
|
||||
exportButton.addActionListener
|
||||
(new ActionListener()
|
||||
{
|
||||
public void actionPerformed(ActionEvent ev)
|
||||
{
|
||||
export();
|
||||
}
|
||||
});
|
||||
p.add(exportButton);
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
/**
|
||||
* Exports the current theme as Java source file. This will prompt the user
|
||||
* to choose a filename.
|
||||
*/
|
||||
void export()
|
||||
{
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
int confirm = chooser.showSaveDialog(this);
|
||||
if (confirm == JFileChooser.APPROVE_OPTION)
|
||||
exportToFile(chooser.getSelectedFile());
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes out the current configured Metal theme as Java source file.
|
||||
*
|
||||
* @param file the file to write into
|
||||
*/
|
||||
void exportToFile(File file)
|
||||
{
|
||||
String fileName = file.getName();
|
||||
if (! fileName.endsWith(".java"))
|
||||
{
|
||||
JOptionPane.showMessageDialog(this,
|
||||
"Filename does not denote a Java source file",
|
||||
"Invalid filename",
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
String className = fileName.substring(0, fileName.length() - 5);
|
||||
Color p1 = theme.getPrimary1();
|
||||
Color p2 = theme.getPrimary2();
|
||||
Color p3 = theme.getPrimary3();
|
||||
Color s1 = theme.getSecondary1();
|
||||
Color s2 = theme.getSecondary2();
|
||||
Color s3 = theme.getSecondary3();
|
||||
|
||||
try
|
||||
{
|
||||
FileOutputStream out = new FileOutputStream(file);
|
||||
Writer writer = new OutputStreamWriter(out);
|
||||
writer.write("import javax.swing.plaf.ColorUIResource;\n");
|
||||
writer.write("import javax.swing.plaf.metal.DefaultMetalTheme;\n");
|
||||
writer.write("public class " + className + " extends DefaultMetalTheme\n");
|
||||
writer.write("{\n");
|
||||
writer.write(" protected ColorUIResource getPrimary1()\n");
|
||||
writer.write(" {\n");
|
||||
writer.write(" return new ColorUIResource(" + p1.getRGB() + ");\n");
|
||||
writer.write(" }\n");
|
||||
writer.write(" protected ColorUIResource getPrimary2()\n");
|
||||
writer.write(" {\n");
|
||||
writer.write(" return new ColorUIResource(" + p2.getRGB() + ");\n");
|
||||
writer.write(" }\n");
|
||||
writer.write(" protected ColorUIResource getPrimary3()\n");
|
||||
writer.write(" {\n");
|
||||
writer.write(" return new ColorUIResource(" + p3.getRGB() + ");\n");
|
||||
writer.write(" }\n");
|
||||
writer.write(" protected ColorUIResource getSecondary1()\n");
|
||||
writer.write(" {\n");
|
||||
writer.write(" return new ColorUIResource(" + s1.getRGB() + ");\n");
|
||||
writer.write(" }\n");
|
||||
writer.write(" protected ColorUIResource getSecondary2()\n");
|
||||
writer.write(" {\n");
|
||||
writer.write(" return new ColorUIResource(" + s2.getRGB() + ");\n");
|
||||
writer.write(" }\n");
|
||||
writer.write(" protected ColorUIResource getSecondary3()\n");
|
||||
writer.write(" {\n");
|
||||
writer.write(" return new ColorUIResource(" + s3.getRGB() + ");\n");
|
||||
writer.write(" }\n");
|
||||
writer.write("}\n");
|
||||
writer.close();
|
||||
out.close();
|
||||
}
|
||||
catch (FileNotFoundException ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the color of the theme with the specified type. For the possible
|
||||
* types see the constants of this class.
|
||||
*
|
||||
* @param colorType the color type to fetch from the theme
|
||||
*
|
||||
* @return the current color of the specified type
|
||||
*
|
||||
* @throws IllegalArgumentException for illegal color types
|
||||
*/
|
||||
Color getColor(int colorType)
|
||||
{
|
||||
Color color = null;
|
||||
switch (colorType)
|
||||
{
|
||||
case PRIMARY1:
|
||||
color = theme.getPrimary1();
|
||||
break;
|
||||
case PRIMARY2:
|
||||
color = theme.getPrimary2();
|
||||
break;
|
||||
case PRIMARY3:
|
||||
color = theme.getPrimary3();
|
||||
break;
|
||||
case SECONDARY1:
|
||||
color = theme.getSecondary1();
|
||||
break;
|
||||
case SECONDARY2:
|
||||
color = theme.getSecondary2();
|
||||
break;
|
||||
case SECONDARY3:
|
||||
color = theme.getSecondary3();
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown color type: " + colorType);
|
||||
}
|
||||
return color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the color of the specified type in the current theme.
|
||||
*
|
||||
* @param colorType the color type
|
||||
* @param color the color to set
|
||||
*
|
||||
* @throws IllegalArgumentException for illegal color types
|
||||
*/
|
||||
void setColor(int colorType, Color color)
|
||||
{
|
||||
switch (colorType)
|
||||
{
|
||||
case PRIMARY1:
|
||||
theme.setPrimary1(color);
|
||||
break;
|
||||
case PRIMARY2:
|
||||
theme.setPrimary2(color);
|
||||
break;
|
||||
case PRIMARY3:
|
||||
theme.setPrimary3(color);
|
||||
break;
|
||||
case SECONDARY1:
|
||||
theme.setSecondary1(color);
|
||||
break;
|
||||
case SECONDARY2:
|
||||
theme.setSecondary2(color);
|
||||
break;
|
||||
case SECONDARY3:
|
||||
theme.setSecondary3(color);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Illegal color type: " + colorType);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The entry point to the application.
|
||||
*
|
||||
* @param args ignored
|
||||
*/
|
||||
public static void main(String[] args)
|
||||
{
|
||||
JFrame f = new JFrame("MetalThemeEditor");
|
||||
f.setContentPane(new MetalThemeEditor());
|
||||
f.pack();
|
||||
f.setVisible(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a MetalThemeEditor.
|
||||
*
|
||||
* @return a DemoFactory that creates a MetalThemeEditor
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new MetalThemeEditor();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -38,13 +38,13 @@ exception statement from your version. */
|
||||
|
||||
package gnu.classpath.examples.swing;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JProgressBar;
|
||||
@@ -54,38 +54,37 @@ import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
|
||||
public class ProgressBarDemo
|
||||
extends JFrame
|
||||
extends JPanel
|
||||
implements ActionListener
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates a new ProgressBarDemo window with the specified title.
|
||||
*
|
||||
* @param title the title of the program window
|
||||
*/
|
||||
ProgressBarDemo(String title)
|
||||
ProgressBarDemo()
|
||||
{
|
||||
super();
|
||||
createContent();
|
||||
}
|
||||
|
||||
void initFrameContent()
|
||||
{
|
||||
super(title);
|
||||
JPanel content = createContent();
|
||||
JPanel closePanel = new JPanel();
|
||||
JButton closeButton = new JButton("Close");
|
||||
closeButton.setActionCommand("CLOSE");
|
||||
closeButton.addActionListener(this);
|
||||
closePanel.add(closeButton);
|
||||
getContentPane().add(content);
|
||||
getContentPane().add(closePanel, BorderLayout.SOUTH);
|
||||
add(closePanel);
|
||||
}
|
||||
|
||||
static JPanel createContent()
|
||||
private void createContent()
|
||||
{
|
||||
JPanel content = new JPanel();
|
||||
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
|
||||
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
|
||||
JPanel horizontalProgressBar = createHorizontalProgressBar();
|
||||
content.add(horizontalProgressBar);
|
||||
content.add(Box.createVerticalStrut(10));
|
||||
add(horizontalProgressBar);
|
||||
add(Box.createVerticalStrut(10));
|
||||
JPanel verticalProgressBar = createVerticalProgressBar();
|
||||
content.add(verticalProgressBar);
|
||||
return content;
|
||||
add(verticalProgressBar);
|
||||
}
|
||||
|
||||
private static JPanel createHorizontalProgressBar()
|
||||
@@ -194,8 +193,10 @@ public class ProgressBarDemo
|
||||
|
||||
public void actionPerformed(ActionEvent event)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
if (event.getActionCommand().equals("CLOSE"))
|
||||
{
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -210,10 +211,29 @@ public class ProgressBarDemo
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
ProgressBarDemo app = new ProgressBarDemo("ProgressBar Demo");
|
||||
app.pack();
|
||||
app.setVisible(true);
|
||||
ProgressBarDemo app = new ProgressBarDemo();
|
||||
app.initFrameContent();
|
||||
JFrame frame = new JFrame("ProgressBar Demo");
|
||||
frame.getContentPane().add(app);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a ProgressBarDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a ProgressBarDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new ProgressBarDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,31 +28,27 @@ 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.JScrollBar;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
/**
|
||||
* A simple scroll bar demo showing various scroll bars in different states.
|
||||
*/
|
||||
public class ScrollBarDemo
|
||||
extends JFrame
|
||||
extends JPanel
|
||||
implements ActionListener
|
||||
{
|
||||
|
||||
private JPanel content;
|
||||
|
||||
/**
|
||||
* Creates a new demo instance.
|
||||
*
|
||||
* @param title the frame title.
|
||||
*/
|
||||
public ScrollBarDemo(String title)
|
||||
public ScrollBarDemo()
|
||||
{
|
||||
super(title);
|
||||
JPanel content = createContent();
|
||||
// initFrameContent() is only called (from main) when running this app
|
||||
// standalone
|
||||
super();
|
||||
createContent();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -62,15 +58,14 @@ public class ScrollBarDemo
|
||||
* only the demo content panel is used, the frame itself is never displayed,
|
||||
* so we can avoid this step.
|
||||
*/
|
||||
public void initFrameContent()
|
||||
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);
|
||||
add(closePanel, BorderLayout.SOUTH);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -80,15 +75,11 @@ public class ScrollBarDemo
|
||||
* 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()
|
||||
private void createContent()
|
||||
{
|
||||
if (content == null)
|
||||
{
|
||||
content = new JPanel(new BorderLayout());
|
||||
JPanel panel = createScrollBarPanel();
|
||||
content.add(panel);
|
||||
}
|
||||
return content;
|
||||
setLayout(new BorderLayout());
|
||||
JPanel panel = createScrollBarPanel();
|
||||
add(panel);
|
||||
}
|
||||
|
||||
private JPanel createScrollBarPanel()
|
||||
@@ -151,10 +142,33 @@ public class ScrollBarDemo
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
ScrollBarDemo app = new ScrollBarDemo("ScrollBar Demo");
|
||||
app.initFrameContent();
|
||||
app.pack();
|
||||
app.setVisible(true);
|
||||
}
|
||||
SwingUtilities.invokeLater
|
||||
(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
ScrollBarDemo app = new ScrollBarDemo();
|
||||
app.initFrameContent();
|
||||
JFrame frame = new JFrame("ScrollBar Demo");
|
||||
frame.getContentPane().add(app);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a ScrollBarDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a ScrollBarDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new ScrollBarDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,15 +29,17 @@ import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JSlider;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
public class SliderDemo extends JFrame implements ActionListener
|
||||
public class SliderDemo
|
||||
extends JPanel
|
||||
implements ActionListener
|
||||
{
|
||||
|
||||
private JPanel content;
|
||||
|
||||
JSlider hslider1;
|
||||
JSlider hslider2;
|
||||
JSlider hslider3;
|
||||
@@ -58,12 +60,9 @@ public class SliderDemo extends JFrame implements ActionListener
|
||||
|
||||
JCheckBox enabledCheckBox;
|
||||
|
||||
public SliderDemo(String frameTitle)
|
||||
public SliderDemo()
|
||||
{
|
||||
super(frameTitle);
|
||||
content = createContent();
|
||||
// initFrameContent() is only called (from main) when running this app
|
||||
// standalone
|
||||
createContent();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -73,15 +72,14 @@ public class SliderDemo extends JFrame implements ActionListener
|
||||
* only the demo content panel is used, the frame itself is never displayed,
|
||||
* so we can avoid this step.
|
||||
*/
|
||||
public void initFrameContent()
|
||||
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);
|
||||
add(closePanel, BorderLayout.SOUTH);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -91,26 +89,22 @@ public class SliderDemo extends JFrame implements ActionListener
|
||||
* 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()
|
||||
private void createContent()
|
||||
{
|
||||
if (content == null)
|
||||
{
|
||||
content = new JPanel(new BorderLayout());
|
||||
JPanel panel = new JPanel(new GridLayout(1, 2));
|
||||
panel.add(createHorizontalPanel());
|
||||
panel.add(createVerticalPanel());
|
||||
enabledCheckBox = new JCheckBox("Enabled");
|
||||
enabledCheckBox.setSelected(true);
|
||||
enabledCheckBox.setActionCommand("TOGGLE_ENABLED");
|
||||
enabledCheckBox.addActionListener(this);
|
||||
JPanel checkBoxPanel = new JPanel();
|
||||
checkBoxPanel.add(enabledCheckBox);
|
||||
JPanel panel2 = new JPanel(new BorderLayout());
|
||||
panel2.add(panel);
|
||||
panel2.add(checkBoxPanel, BorderLayout.SOUTH);
|
||||
content.add(panel2);
|
||||
}
|
||||
return content;
|
||||
setLayout(new BorderLayout());
|
||||
JPanel panel = new JPanel(new GridLayout(1, 2));
|
||||
panel.add(createHorizontalPanel());
|
||||
panel.add(createVerticalPanel());
|
||||
enabledCheckBox = new JCheckBox("Enabled");
|
||||
enabledCheckBox.setSelected(true);
|
||||
enabledCheckBox.setActionCommand("TOGGLE_ENABLED");
|
||||
enabledCheckBox.addActionListener(this);
|
||||
JPanel checkBoxPanel = new JPanel();
|
||||
checkBoxPanel.add(enabledCheckBox);
|
||||
JPanel panel2 = new JPanel(new BorderLayout());
|
||||
panel2.add(panel);
|
||||
panel2.add(checkBoxPanel, BorderLayout.SOUTH);
|
||||
add(panel2);
|
||||
}
|
||||
|
||||
private JPanel createHorizontalPanel()
|
||||
@@ -259,10 +253,35 @@ public class SliderDemo extends JFrame implements ActionListener
|
||||
}
|
||||
public static void main(String[] args)
|
||||
{
|
||||
SliderDemo app = new SliderDemo("Slider Demo");
|
||||
app.initFrameContent();
|
||||
app.pack();
|
||||
app.setVisible(true);
|
||||
SwingUtilities.invokeLater
|
||||
(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
SliderDemo app = new SliderDemo();
|
||||
app.initFrameContent();
|
||||
JFrame frame = new JFrame("Slider Demo");
|
||||
frame.getContentPane().add(app);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a SliderDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a SliderDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new SliderDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,24 +33,22 @@ import java.util.Date;
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JSpinner;
|
||||
import javax.swing.SpinnerDateModel;
|
||||
import javax.swing.SpinnerListModel;
|
||||
import javax.swing.SpinnerNumberModel;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.plaf.metal.DefaultMetalTheme;
|
||||
import javax.swing.plaf.metal.MetalLookAndFeel;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
/**
|
||||
* A simple demo showing various spinners in different states.
|
||||
*/
|
||||
public class SpinnerDemo
|
||||
extends JFrame
|
||||
extends JPanel
|
||||
implements ActionListener
|
||||
{
|
||||
private JPanel content;
|
||||
private JCheckBox spinnerState1;
|
||||
private JSpinner spinner1;
|
||||
private JSpinner spinner2;
|
||||
@@ -65,15 +63,11 @@ public class SpinnerDemo
|
||||
|
||||
/**
|
||||
* Creates a new demo instance.
|
||||
*
|
||||
* @param title the frame title.
|
||||
*/
|
||||
public SpinnerDemo(String title)
|
||||
public SpinnerDemo()
|
||||
{
|
||||
super(title);
|
||||
JPanel content = createContent();
|
||||
// initFrameContent() is only called (from main) when running this app
|
||||
// standalone
|
||||
super();
|
||||
createContent();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -83,15 +77,14 @@ public class SpinnerDemo
|
||||
* only the demo content panel is used, the frame itself is never displayed,
|
||||
* so we can avoid this step.
|
||||
*/
|
||||
public void initFrameContent()
|
||||
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);
|
||||
add(closePanel, BorderLayout.SOUTH);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -101,18 +94,14 @@ public class SpinnerDemo
|
||||
* 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()
|
||||
private void createContent()
|
||||
{
|
||||
if (content == null)
|
||||
{
|
||||
content = new JPanel(new BorderLayout());
|
||||
JPanel panel = new JPanel(new GridLayout(3, 1));
|
||||
panel.add(createPanel1());
|
||||
panel.add(createPanel2());
|
||||
panel.add(createPanel3());
|
||||
content.add(panel);
|
||||
}
|
||||
return content;
|
||||
setLayout(new BorderLayout());
|
||||
JPanel panel = new JPanel(new GridLayout(3, 1));
|
||||
panel.add(createPanel1());
|
||||
panel.add(createPanel2());
|
||||
panel.add(createPanel3());
|
||||
add(panel);
|
||||
}
|
||||
|
||||
private JPanel createPanel1()
|
||||
@@ -213,18 +202,34 @@ public class SpinnerDemo
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());
|
||||
UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel());
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
SpinnerDemo app = new SpinnerDemo("Spinner Demo");
|
||||
app.initFrameContent();
|
||||
app.pack();
|
||||
app.setVisible(true);
|
||||
SwingUtilities.invokeLater
|
||||
(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
SpinnerDemo app = new SpinnerDemo();
|
||||
app.initFrameContent();
|
||||
JFrame frame = new JFrame("Spinner Demo");
|
||||
frame.getContentPane().add(app);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a SpinnerDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a SpinnerDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new SpinnerDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
/* TabbedPaneDemo.java -- Demonstrates JTabbedPane
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
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.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.classpath.examples.swing;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.GridLayout;
|
||||
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.JTabbedPane;
|
||||
import javax.swing.SwingConstants;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
public class TabbedPaneDemo
|
||||
extends JPanel
|
||||
implements ActionListener
|
||||
{
|
||||
TabbedPaneDemo()
|
||||
{
|
||||
super();
|
||||
createContent();
|
||||
}
|
||||
|
||||
private void createContent()
|
||||
{
|
||||
JPanel p = new JPanel();
|
||||
p.setLayout(new GridLayout(2, 2));
|
||||
JTabbedPane tabs1 = new JTabbedPane(SwingConstants.TOP);
|
||||
tabs1.add("Top Item 1", new JButton("Button"));
|
||||
tabs1.add("Top Item 2", new JButton("Button"));
|
||||
JTabbedPane tabs2 = new JTabbedPane(SwingConstants.LEFT);
|
||||
tabs2.add("Left Item 1", new JButton("Button"));
|
||||
tabs2.add("Left Item 2", new JButton("Button"));
|
||||
JTabbedPane tabs3 = new JTabbedPane(SwingConstants.BOTTOM);
|
||||
tabs3.add("Bottom Item 1", new JButton("Button"));
|
||||
tabs3.add("Bottom Item 2", new JButton("Button"));
|
||||
JTabbedPane tabs4 = new JTabbedPane(SwingConstants.RIGHT);
|
||||
tabs4.add("Right Item 1", new JButton("Button"));
|
||||
tabs4.add("Right Item 2", new JButton("Button"));
|
||||
p.add(tabs1);
|
||||
p.add(tabs2);
|
||||
p.add(tabs3);
|
||||
p.add(tabs4);
|
||||
setLayout(new BorderLayout());
|
||||
add(p, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
if (e.getActionCommand().equals("CLOSE"))
|
||||
{
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
SwingUtilities.invokeLater
|
||||
(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
TabbedPaneDemo app = new TabbedPaneDemo();
|
||||
app.initFrameContent();
|
||||
JFrame frame = new JFrame("TabbedPane Demo");
|
||||
frame.getContentPane().add(app);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a TabbedPaneDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a TabbedPaneDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new TabbedPaneDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -41,10 +41,14 @@ package gnu.classpath.examples.swing;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Dimension;
|
||||
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.plaf.metal.MetalIconFactory;
|
||||
import javax.swing.table.DefaultTableColumnModel;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.table.TableColumn;
|
||||
@@ -54,7 +58,7 @@ import javax.swing.table.TableColumn;
|
||||
*
|
||||
* @author Audrius Meskauskas (audriusa@bioinformatics.org)
|
||||
*/
|
||||
public class TableDemo extends JFrame
|
||||
public class TableDemo extends JPanel
|
||||
{
|
||||
/**
|
||||
* The initial row count for this table.
|
||||
@@ -74,11 +78,12 @@ public class TableDemo extends JFrame
|
||||
{
|
||||
|
||||
/**
|
||||
* Return true if the cell is editable. All cells are editable.
|
||||
* Return true if the cell is editable.
|
||||
* Icons are not editable, other cells are editable.
|
||||
*/
|
||||
public boolean isCellEditable(int parm1, int parm2)
|
||||
public boolean isCellEditable(int row, int column)
|
||||
{
|
||||
return true;
|
||||
return column!=1;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -124,19 +129,20 @@ public class TableDemo extends JFrame
|
||||
}
|
||||
|
||||
/**
|
||||
* The first column contains booleans, others - default class.
|
||||
* The first column contains booleans, the second - icons,
|
||||
* others - default class.
|
||||
*/
|
||||
public Class getColumnClass(int column)
|
||||
{
|
||||
if (column == 0)
|
||||
return Boolean.class;
|
||||
else if (column == 1)
|
||||
return Icon.class;
|
||||
else
|
||||
return super.getColumnClass(column);
|
||||
}
|
||||
}
|
||||
|
||||
private JPanel content;
|
||||
|
||||
/**
|
||||
* The table being displayed.
|
||||
*/
|
||||
@@ -154,13 +160,11 @@ public class TableDemo extends JFrame
|
||||
|
||||
/**
|
||||
* Create the table demo with the given titel.
|
||||
*
|
||||
* @param title the frame title.
|
||||
*/
|
||||
public TableDemo(String title)
|
||||
public TableDemo()
|
||||
{
|
||||
super(title);
|
||||
getContentPane().add(createContent(), BorderLayout.CENTER);
|
||||
super();
|
||||
createContent();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -169,55 +173,59 @@ public class TableDemo extends JFrame
|
||||
* 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()
|
||||
private void createContent()
|
||||
{
|
||||
if (content == null)
|
||||
setLayout(new BorderLayout());
|
||||
values = new Object[rows][];
|
||||
|
||||
// The icons that appear in the icon column.
|
||||
Icon[] icons = new Icon[]
|
||||
{
|
||||
MetalIconFactory.getTreeComputerIcon(),
|
||||
MetalIconFactory.getTreeHardDriveIcon(),
|
||||
MetalIconFactory.getTreeFolderIcon(),
|
||||
};
|
||||
|
||||
for (int i = 0; i < values.length; i++)
|
||||
{
|
||||
JPanel p = new JPanel();
|
||||
p.setLayout(new BorderLayout());
|
||||
values = new Object[rows][];
|
||||
for (int i = 0; i < values.length; i++)
|
||||
values[i] = new Object[cols];
|
||||
for (int j = 2; j < cols; j++)
|
||||
{
|
||||
values[i] = new Object[cols];
|
||||
for (int j = 1; j < cols; j++)
|
||||
{
|
||||
values[i][j] = "" + ((char) ('a' + j)) + i;
|
||||
}
|
||||
values [i][0] = i % 2 == 0? Boolean.TRUE : Boolean.FALSE;
|
||||
values[i][j] = "" + ((char) ('a' + j)) + i;
|
||||
}
|
||||
|
||||
table.setModel(model);
|
||||
|
||||
// Make the columns with gradually increasing width:
|
||||
DefaultTableColumnModel cm = new DefaultTableColumnModel();
|
||||
for (int i = 0; i < cols; i++)
|
||||
{
|
||||
TableColumn column = new TableColumn(i);
|
||||
|
||||
// Showing the variable width columns.
|
||||
int width = 100+20*i;
|
||||
column.setPreferredWidth(width);
|
||||
|
||||
// If we do not set the header value here, the value, returned
|
||||
// by model, is used.
|
||||
column.setHeaderValue("Width +"+(20*i));
|
||||
|
||||
cm.addColumn(column);
|
||||
}
|
||||
|
||||
table.setColumnModel(cm);
|
||||
|
||||
// Create the table, place it into scroll pane and place
|
||||
// the pane into this frame.
|
||||
JScrollPane scroll = new JScrollPane();
|
||||
|
||||
// The horizontal scroll bar is never needed.
|
||||
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
|
||||
scroll.getViewport().add(table);
|
||||
p.add(scroll, BorderLayout.CENTER);
|
||||
content = p;
|
||||
values [i][0] = i % 2 == 0? Boolean.TRUE : Boolean.FALSE;
|
||||
values [i][1] = icons [ i % icons.length ];
|
||||
}
|
||||
return content;
|
||||
|
||||
table.setModel(model);
|
||||
|
||||
// Make the columns with gradually increasing width:
|
||||
DefaultTableColumnModel cm = new DefaultTableColumnModel();
|
||||
for (int i = 0; i < cols; i++)
|
||||
{
|
||||
TableColumn column = new TableColumn(i);
|
||||
|
||||
// Showing the variable width columns.
|
||||
int width = 100+10*i;
|
||||
column.setPreferredWidth(width);
|
||||
|
||||
// If we do not set the header value here, the value, returned
|
||||
// by model, is used.
|
||||
column.setHeaderValue("Width +"+(20*i));
|
||||
|
||||
cm.addColumn(column);
|
||||
}
|
||||
|
||||
table.setColumnModel(cm);
|
||||
|
||||
// Create the table, place it into scroll pane and place
|
||||
// the pane into this frame.
|
||||
JScrollPane scroll = new JScrollPane();
|
||||
|
||||
// The horizontal scroll bar is never needed.
|
||||
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
|
||||
scroll.getViewport().add(table);
|
||||
add(scroll, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -228,9 +236,33 @@ public class TableDemo extends JFrame
|
||||
*/
|
||||
public static void main(String[] args)
|
||||
{
|
||||
TableDemo frame = new TableDemo("Table double click on the cell to edit.");
|
||||
frame.setSize(new Dimension(640, 100));
|
||||
frame.validate();
|
||||
frame.setVisible(true);
|
||||
SwingUtilities.invokeLater
|
||||
(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
TableDemo demo = new TableDemo();
|
||||
JFrame frame = new JFrame();
|
||||
frame.getContentPane().add(demo);
|
||||
frame.setSize(new Dimension(640, 100));
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a TableDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a TableDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new TableDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,620 @@
|
||||
/* 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.JComponent;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JTabbedPane;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.SwingUtilities;
|
||||
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 JPanel
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
public TextAreaDemo()
|
||||
{
|
||||
super();
|
||||
createContent();
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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).
|
||||
*/
|
||||
private void createContent()
|
||||
{
|
||||
setLayout(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());
|
||||
add(tabPane);
|
||||
}
|
||||
|
||||
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.setBackground(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.RED);
|
||||
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)
|
||||
{
|
||||
SwingUtilities.invokeLater
|
||||
(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
TextAreaDemo app = new TextAreaDemo();
|
||||
app.initFrameContent();
|
||||
JFrame frame = new JFrame();
|
||||
frame.getContentPane().add(app);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a TextAreaDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a TextAreaDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new TextAreaDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/* TextFieldDemo.java -- An example showing various textfields in Swing.
|
||||
Copyright (C) 2005, 2006, Free Software Foundation, Inc.
|
||||
Copyright (C) 2005, 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath examples.
|
||||
|
||||
@@ -27,7 +27,9 @@ 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;
|
||||
|
||||
@@ -36,18 +38,28 @@ import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.border.CompoundBorder;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.border.LineBorder;
|
||||
import javax.swing.border.TitledBorder;
|
||||
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 textfield demo showing various textfields in different states.
|
||||
*/
|
||||
public class TextFieldDemo
|
||||
extends JFrame
|
||||
extends JPanel
|
||||
implements ActionListener
|
||||
{
|
||||
|
||||
@@ -106,66 +118,96 @@ public class TextFieldDemo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static class DemoHighlightPainter
|
||||
extends LayerPainter
|
||||
{
|
||||
|
||||
private JPanel content;
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* The left aligned textfields and state buttons.
|
||||
*/
|
||||
JTextField textfield1;
|
||||
JTextField textfield2;
|
||||
JTextField textfield3;
|
||||
JCheckBox enabled1;
|
||||
JCheckBox editable1;
|
||||
JPanel textFieldPanel1;
|
||||
Compound compound1;
|
||||
|
||||
/**
|
||||
* The right aligned textfields and state buttons.
|
||||
*/
|
||||
JTextField textfield4;
|
||||
JTextField textfield5;
|
||||
JTextField textfield6;
|
||||
JCheckBox enabled2;
|
||||
JCheckBox editable2;
|
||||
Compound compound2;
|
||||
|
||||
/**
|
||||
* The centered textfields and state buttons.
|
||||
*/
|
||||
JTextField textfield7;
|
||||
JTextField textfield8;
|
||||
JTextField textfield9;
|
||||
JCheckBox enabled3;
|
||||
JCheckBox editable3;
|
||||
Compound compound3;
|
||||
|
||||
/**
|
||||
* The custom colored textfields and state buttons.
|
||||
*/
|
||||
JTextField textfield10;
|
||||
JTextField textfield11;
|
||||
JTextField textfield12;
|
||||
JTextField textfield13;
|
||||
JTextField textfield14;
|
||||
JCheckBox enabled4;
|
||||
JCheckBox editable4;
|
||||
Compound compound4;
|
||||
Compound compound5;
|
||||
|
||||
/**
|
||||
* Some miscallenous textfield demos.
|
||||
* Some miscellaneous textfield demos.
|
||||
*/
|
||||
JTextField textfield15;
|
||||
JTextField textfield16;
|
||||
JCheckBox enabled5;
|
||||
JCheckBox editable5;
|
||||
Compound compound6;
|
||||
|
||||
/**
|
||||
* Some textfields with custom borders.
|
||||
*/
|
||||
Compound compound7;
|
||||
|
||||
/**
|
||||
* Creates a new demo instance.
|
||||
*
|
||||
* @param title the frame title.
|
||||
*/
|
||||
public TextFieldDemo(String title)
|
||||
public TextFieldDemo()
|
||||
{
|
||||
super(title);
|
||||
JPanel content = createContent();
|
||||
// initFrameContent() is only called (from main) when running this app
|
||||
// standalone
|
||||
super();
|
||||
createContent();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -175,15 +217,14 @@ public class TextFieldDemo
|
||||
* only the demo content panel is used, the frame itself is never displayed,
|
||||
* so we can avoid this step.
|
||||
*/
|
||||
public void initFrameContent()
|
||||
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);
|
||||
add(closePanel, BorderLayout.SOUTH);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -193,239 +234,185 @@ public class TextFieldDemo
|
||||
* 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()
|
||||
private void createContent()
|
||||
{
|
||||
if (content == null)
|
||||
{
|
||||
content = new JPanel(new BorderLayout());
|
||||
JPanel panel = new JPanel(new GridLayout(5, 1));
|
||||
panel.add(createLeftAlignedPanel());
|
||||
panel.add(createRightAlignedPanel());
|
||||
panel.add(createCenteredPanel());
|
||||
panel.add(createCustomColoredPanel());
|
||||
panel.add(createMiscPanel());
|
||||
content.add(panel);
|
||||
//content.setPreferredSize(new Dimension(400, 300));
|
||||
}
|
||||
return content;
|
||||
setLayout(new BorderLayout());
|
||||
JPanel panel = new JPanel(new GridLayout(7, 1));
|
||||
panel.add(createLeftAlignedPanel());
|
||||
panel.add(createRightAlignedPanel());
|
||||
panel.add(createCenteredPanel());
|
||||
panel.add(createCustomColorPanel1());
|
||||
panel.add(createCustomColorPanel2());
|
||||
panel.add(createCustomBordersPanel());
|
||||
panel.add(createMiscPanel());
|
||||
|
||||
// Put everything in a scroll pane to make it neccessary
|
||||
// to reach the bottom inner panels if the screen is to small.
|
||||
add(new JScrollPane(panel));
|
||||
}
|
||||
|
||||
private JPanel createLeftAlignedPanel()
|
||||
{
|
||||
JPanel panel = new JPanel(new BorderLayout());
|
||||
panel.setBorder(BorderFactory.createTitledBorder("Left aligned"));
|
||||
compound1 = createTextFieldCompound("Left aligned", 1);
|
||||
|
||||
compound1.setupTextfields("Hello World!",
|
||||
JTextField.LEFT,
|
||||
new Font[] { new Font("Dialog", Font.PLAIN, 8),
|
||||
new Font("Dialog", Font.ITALIC, 12),
|
||||
new Font("Dialog", Font.BOLD, 14)
|
||||
});
|
||||
|
||||
textFieldPanel1 = new JPanel();
|
||||
textFieldPanel1.setLayout(new BoxLayout(textFieldPanel1, BoxLayout.X_AXIS));
|
||||
return compound1.panel;
|
||||
}
|
||||
|
||||
private Compound createTextFieldCompound(String title, int actionCommandNo)
|
||||
{
|
||||
Compound compound = new Compound();
|
||||
compound.panel = new JPanel(new BorderLayout());
|
||||
compound.panel.setBorder(BorderFactory.createTitledBorder(title));
|
||||
|
||||
compound.textFieldPanel = new JPanel();
|
||||
compound.textFieldPanel.setLayout(new BoxLayout(compound.textFieldPanel, BoxLayout.X_AXIS));
|
||||
|
||||
textfield1 = new JTextField("Hello World!");
|
||||
textfield1.setHorizontalAlignment(JTextField.LEFT);
|
||||
textfield1.setFont(new Font("Dialog", Font.PLAIN, 8));
|
||||
textFieldPanel1.add(textfield1);
|
||||
|
||||
textfield2 = new JTextField("Hello World!");
|
||||
textfield2.setHorizontalAlignment(JTextField.LEFT);
|
||||
textfield2.setFont(new Font("Dialog", Font.ITALIC, 12));
|
||||
textFieldPanel1.add(textfield2);
|
||||
|
||||
textfield3 = new JTextField("Hello World!");
|
||||
textfield3.setHorizontalAlignment(JTextField.LEFT);
|
||||
textfield3.setFont(new Font("Dialog", Font.BOLD, 14));
|
||||
textFieldPanel1.add(textfield3);
|
||||
|
||||
panel.add(textFieldPanel1);
|
||||
compound.panel.add(compound.textFieldPanel);
|
||||
|
||||
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);
|
||||
compound.enabled = new JCheckBox("enabled");
|
||||
compound.enabled.setSelected(true);
|
||||
compound.enabled.addActionListener(this);
|
||||
compound.enabled.setActionCommand("ENABLED" + actionCommandNo);
|
||||
statePanel.add(compound.enabled);
|
||||
compound.editable = new JCheckBox("editable");
|
||||
compound.editable.setSelected(true);
|
||||
compound.editable.addActionListener(this);
|
||||
compound.editable.setActionCommand("EDITABLE" + actionCommandNo);
|
||||
statePanel.add(compound.editable);
|
||||
statePanel.add(Box.createVerticalGlue());
|
||||
panel.add(statePanel, BorderLayout.EAST);
|
||||
compound.panel.add(statePanel, BorderLayout.EAST);
|
||||
|
||||
return panel;
|
||||
return compound;
|
||||
}
|
||||
|
||||
private JPanel createRightAlignedPanel()
|
||||
{
|
||||
JPanel panel = new JPanel(new BorderLayout());
|
||||
panel.setBorder(BorderFactory.createTitledBorder("Right aligned"));
|
||||
compound2 = createTextFieldCompound("Right aligned", 2);
|
||||
|
||||
compound2.setupTextfields("Hello World!",
|
||||
JTextField.RIGHT,
|
||||
new Font[] { new Font("Dialog", Font.PLAIN, 8),
|
||||
new Font("Dialog", Font.ITALIC, 12),
|
||||
new Font("Dialog", Font.BOLD, 14)
|
||||
});
|
||||
|
||||
JPanel textFieldPanel = new JPanel();
|
||||
textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.X_AXIS));
|
||||
|
||||
textfield4 = new JTextField("Hello World!");
|
||||
textfield4.setHorizontalAlignment(JTextField.RIGHT);
|
||||
textfield4.setFont(new Font("Dialog", Font.PLAIN, 8));
|
||||
textFieldPanel.add(textfield4);
|
||||
|
||||
textfield5 = new JTextField("Hello World!");
|
||||
textfield5.setHorizontalAlignment(JTextField.RIGHT);
|
||||
textfield5.setFont(new Font("Dialog", Font.ITALIC, 12));
|
||||
textFieldPanel.add(textfield5);
|
||||
|
||||
textfield6 = new JTextField("Hello World!");
|
||||
textfield6.setHorizontalAlignment(JTextField.RIGHT);
|
||||
textfield6.setFont(new Font("Dialog", Font.BOLD, 14));
|
||||
textFieldPanel.add(textfield6);
|
||||
|
||||
panel.add(textFieldPanel);
|
||||
|
||||
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;
|
||||
return compound2.panel;
|
||||
}
|
||||
|
||||
private JPanel createCenteredPanel()
|
||||
{
|
||||
JPanel panel = new JPanel(new BorderLayout());
|
||||
panel.setBorder(BorderFactory.createTitledBorder("Centered"));
|
||||
|
||||
JPanel textFieldPanel = new JPanel();
|
||||
textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.X_AXIS));
|
||||
compound3 = createTextFieldCompound("Centered", 3);
|
||||
|
||||
textfield7 = new JTextField("Hello World!");
|
||||
textfield7.setHorizontalAlignment(JTextField.CENTER);
|
||||
textfield7.setFont(new Font("Dialog", Font.PLAIN, 8));
|
||||
textFieldPanel.add(textfield7);
|
||||
|
||||
textfield8 = new JTextField("Hello World!");
|
||||
textfield8.setHorizontalAlignment(JTextField.CENTER);
|
||||
textfield8.setFont(new Font("Dialog", Font.ITALIC, 12));
|
||||
textFieldPanel.add(textfield8);
|
||||
|
||||
textfield9 = new JTextField("Hello World!");
|
||||
textfield9.setHorizontalAlignment(JTextField.CENTER);
|
||||
textfield9.setFont(new Font("Dialog", Font.BOLD, 14));
|
||||
textFieldPanel.add(textfield9);
|
||||
|
||||
panel.add(textFieldPanel);
|
||||
|
||||
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;
|
||||
compound3.setupTextfields("Hello World!",
|
||||
JTextField.CENTER,
|
||||
new Font[] { new Font("Dialog", Font.PLAIN, 8),
|
||||
new Font("Dialog", Font.ITALIC, 12),
|
||||
new Font("Dialog", Font.BOLD, 14)
|
||||
});
|
||||
|
||||
return compound3.panel;
|
||||
}
|
||||
|
||||
private JPanel createCustomColoredPanel()
|
||||
private JPanel createCustomColorPanel1()
|
||||
{
|
||||
JPanel panel = new JPanel(new BorderLayout());
|
||||
compound4 = createTextFieldCompound("Custom colors I", 4);
|
||||
|
||||
compound4.textfield1 = new JTextField("custom foreground");
|
||||
compound4.textfield1.setForeground(Color.RED);
|
||||
compound4.textFieldPanel.add(compound4.textfield1);
|
||||
|
||||
compound4.textfield2 = new JTextField("custom background");
|
||||
compound4.textfield2.setBackground(Color.YELLOW);
|
||||
compound4.textFieldPanel.add(compound4.textfield2);
|
||||
|
||||
compound4.textfield3 = new JTextField("custom foreground and background");
|
||||
compound4.textfield3.setForeground(Color.RED);
|
||||
compound4.textfield3.setBackground(Color.YELLOW);
|
||||
compound4.textFieldPanel.add(compound4.textfield3);
|
||||
|
||||
JPanel textFieldPanel = new JPanel();
|
||||
panel.setBorder(BorderFactory.createTitledBorder("Custom colors"));
|
||||
textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.X_AXIS));
|
||||
return compound4.panel;
|
||||
|
||||
}
|
||||
|
||||
private JPanel createCustomColorPanel2()
|
||||
{
|
||||
compound5 = createTextFieldCompound("Custom colors II", 5);
|
||||
|
||||
textfield10 = new JTextField("custom foreground");
|
||||
textfield10.setForeground(Color.GREEN);
|
||||
textFieldPanel.add(textfield10);
|
||||
compound5.textfield1 = new JTextField("custom disabled textcolor");
|
||||
compound5.textfield1.setDisabledTextColor(Color.BLUE);
|
||||
compound5.textFieldPanel.add(compound5.textfield1);
|
||||
|
||||
textfield11 = new JTextField("custom background");
|
||||
textfield11.setForeground(Color.YELLOW);
|
||||
textFieldPanel.add(textfield11);
|
||||
compound5.textfield2 = new JTextField("custom selected text color");
|
||||
compound5.textfield2.setSelectedTextColor(Color.RED);
|
||||
compound5.textFieldPanel.add(compound5.textfield2);
|
||||
|
||||
textfield12 = new JTextField("custom disabled textcolor");
|
||||
textfield12.setDisabledTextColor(Color.BLUE);
|
||||
textFieldPanel.add(textfield12);
|
||||
|
||||
textfield13 = new JTextField("custom selected text color");
|
||||
textfield13.setSelectedTextColor(Color.RED);
|
||||
textFieldPanel.add(textfield13);
|
||||
|
||||
textfield14 = new JTextField("custom selection color");
|
||||
textfield14.setSelectionColor(Color.CYAN);
|
||||
textFieldPanel.add(textfield14);
|
||||
|
||||
panel.add(textFieldPanel);
|
||||
|
||||
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;
|
||||
compound5.textfield3 = new JTextField("custom selection color");
|
||||
compound5.textfield3.setSelectionColor(Color.BLACK);
|
||||
compound5.textFieldPanel.add(compound5.textfield3);
|
||||
|
||||
return compound5.panel;
|
||||
|
||||
}
|
||||
|
||||
private JPanel createMiscPanel()
|
||||
{
|
||||
JPanel panel = new JPanel(new BorderLayout());
|
||||
panel.setBorder(BorderFactory.createTitledBorder("Miscallenous"));
|
||||
|
||||
JPanel textFieldPanel = new JPanel();
|
||||
textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.X_AXIS));
|
||||
compound6 = createTextFieldCompound("Miscellaneous", 6);
|
||||
|
||||
textfield15 = new JTextField("Custom Caret");
|
||||
textfield15.setCaret(new CornerCaret());
|
||||
textFieldPanel.add(textfield15);
|
||||
compound6.textfield1 = new JTextField("Custom Caret");
|
||||
compound6.textfield1.setCaret(new CornerCaret());
|
||||
compound6.textFieldPanel.add(compound6.textfield1);
|
||||
|
||||
textfield16 = new JTextField("Custom Caret color");
|
||||
textfield16.setCaretColor(Color.MAGENTA);
|
||||
textFieldPanel.add(textfield16);
|
||||
compound6.textfield2 = new JTextField("Custom Caret color");
|
||||
compound6.textfield2.setForeground(Color.LIGHT_GRAY);
|
||||
compound6.textfield2.setBackground(Color.BLACK);
|
||||
compound6.textfield2.setSelectedTextColor(Color.BLACK);
|
||||
compound6.textfield2.setCaretColor(Color.WHITE);
|
||||
compound6.textfield2.setSelectionColor(Color.DARK_GRAY);
|
||||
compound6.textFieldPanel.add(compound6.textfield2);
|
||||
|
||||
panel.add(textFieldPanel);
|
||||
compound6.textfield3 = new JTextField("Custom highlighter");
|
||||
compound6.textfield3.setCaret(new DefaultCaret()
|
||||
{
|
||||
public Highlighter.HighlightPainter getSelectionPainter()
|
||||
{
|
||||
return DemoHighlightPainter.INSTANCE;
|
||||
}
|
||||
});
|
||||
compound6.textFieldPanel.add(compound6.textfield3);
|
||||
|
||||
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 compound6.panel;
|
||||
}
|
||||
|
||||
private JPanel createCustomBordersPanel()
|
||||
{
|
||||
compound7 = createTextFieldCompound("Custom borders", 7);
|
||||
|
||||
return panel;
|
||||
compound7.textfield1 = new JTextField("red 5 pixel lineborder");
|
||||
compound7.textfield1.setBorder(new LineBorder(Color.RED, 5));
|
||||
compound7.textFieldPanel.add(compound7.textfield1);
|
||||
|
||||
compound7.textfield2 = new JTextField("complex irregular border");
|
||||
|
||||
CompoundBorder innerCompound = new CompoundBorder(new EmptyBorder(5, 40, 15, 10), new LineBorder(Color.BLACK));
|
||||
CompoundBorder outerCompound = new CompoundBorder(new LineBorder(Color.BLACK), innerCompound);
|
||||
compound7.textfield2.setBorder(outerCompound);
|
||||
compound7.textFieldPanel.add(compound7.textfield2);
|
||||
|
||||
compound7.textfield3 = new JTextField("a titled border", 10);
|
||||
compound7.textfield3.setBorder(new TitledBorder(null, "Freak Out Border", TitledBorder.CENTER, TitledBorder.LEFT));
|
||||
compound7.textFieldPanel.add(compound7.textfield3);
|
||||
|
||||
return compound7.panel;
|
||||
}
|
||||
|
||||
public void actionPerformed(ActionEvent e)
|
||||
@@ -436,72 +423,172 @@ public class TextFieldDemo
|
||||
}
|
||||
else if (e.getActionCommand().equals("ENABLED1"))
|
||||
{
|
||||
boolean enabled = enabled1.isSelected();
|
||||
textfield1.setEnabled(enabled);
|
||||
textfield2.setEnabled(enabled);
|
||||
textfield3.setEnabled(enabled);
|
||||
boolean enabled = compound1.enabled.isSelected();
|
||||
compound1.textfield1.setEnabled(enabled);
|
||||
compound1.textfield2.setEnabled(enabled);
|
||||
compound1.textfield3.setEnabled(enabled);
|
||||
}
|
||||
else if (e.getActionCommand().equals("EDITABLE1"))
|
||||
{
|
||||
boolean editable = editable1.isSelected();
|
||||
textfield1.setEditable(editable);
|
||||
textfield2.setEditable(editable);
|
||||
textfield3.setEditable(editable);
|
||||
boolean editable = compound1.editable.isSelected();
|
||||
compound1.textfield1.setEditable(editable);
|
||||
compound1.textfield2.setEditable(editable);
|
||||
compound1.textfield3.setEditable(editable);
|
||||
}
|
||||
else if (e.getActionCommand().equals("ENABLED2"))
|
||||
{
|
||||
boolean enabled = enabled2.isSelected();
|
||||
textfield4.setEnabled(enabled);
|
||||
textfield5.setEnabled(enabled);
|
||||
textfield6.setEnabled(enabled);
|
||||
boolean enabled = compound2.enabled.isSelected();
|
||||
compound2.textfield1.setEnabled(enabled);
|
||||
compound2.textfield2.setEnabled(enabled);
|
||||
compound2.textfield3.setEnabled(enabled);
|
||||
}
|
||||
else if (e.getActionCommand().equals("EDITABLE2"))
|
||||
{
|
||||
boolean editable = editable2.isSelected();
|
||||
textfield4.setEditable(editable);
|
||||
textfield5.setEditable(editable);
|
||||
textfield6.setEditable(editable);
|
||||
boolean editable = compound2.editable.isSelected();
|
||||
compound2.textfield1.setEditable(editable);
|
||||
compound2.textfield2.setEditable(editable);
|
||||
compound2.textfield3.setEditable(editable);
|
||||
}
|
||||
else if (e.getActionCommand().equals("ENABLED3"))
|
||||
{
|
||||
boolean enabled = enabled3.isSelected();
|
||||
textfield7.setEnabled(enabled);
|
||||
textfield8.setEnabled(enabled);
|
||||
textfield9.setEnabled(enabled);
|
||||
boolean enabled = compound3.enabled.isSelected();
|
||||
compound3.textfield1.setEnabled(enabled);
|
||||
compound3.textfield2.setEnabled(enabled);
|
||||
compound3.textfield3.setEnabled(enabled);
|
||||
}
|
||||
else if (e.getActionCommand().equals("EDITABLE3"))
|
||||
{
|
||||
boolean editable = editable3.isSelected();
|
||||
textfield7.setEditable(editable);
|
||||
textfield8.setEditable(editable);
|
||||
textfield9.setEditable(editable);
|
||||
boolean editable = compound3.editable.isSelected();
|
||||
compound3.textfield1.setEditable(editable);
|
||||
compound3.textfield2.setEditable(editable);
|
||||
compound3.textfield3.setEditable(editable);
|
||||
}
|
||||
else if (e.getActionCommand().equals("ENABLED4"))
|
||||
{
|
||||
boolean enabled = enabled4.isSelected();
|
||||
textfield10.setEnabled(enabled);
|
||||
textfield11.setEnabled(enabled);
|
||||
textfield12.setEnabled(enabled);
|
||||
textfield13.setEnabled(enabled);
|
||||
textfield14.setEnabled(enabled);
|
||||
boolean enabled = compound4.enabled.isSelected();
|
||||
compound4.textfield1.setEnabled(enabled);
|
||||
compound4.textfield2.setEnabled(enabled);
|
||||
compound4.textfield3.setEnabled(enabled);
|
||||
}
|
||||
else if (e.getActionCommand().equals("EDITABLE4"))
|
||||
{
|
||||
boolean editable = editable4.isSelected();
|
||||
textfield10.setEditable(editable);
|
||||
textfield11.setEditable(editable);
|
||||
textfield12.setEditable(editable);
|
||||
textfield13.setEditable(editable);
|
||||
textfield14.setEditable(editable);
|
||||
boolean editable = compound4.editable.isSelected();
|
||||
compound4.textfield1.setEditable(editable);
|
||||
compound4.textfield2.setEditable(editable);
|
||||
compound4.textfield3.setEditable(editable);
|
||||
}
|
||||
else if (e.getActionCommand().equals("ENABLED5"))
|
||||
{
|
||||
boolean enabled = compound5.enabled.isSelected();
|
||||
compound5.textfield1.setEnabled(enabled);
|
||||
compound5.textfield2.setEnabled(enabled);
|
||||
compound5.textfield3.setEnabled(enabled);
|
||||
}
|
||||
else if (e.getActionCommand().equals("EDITABLE5"))
|
||||
{
|
||||
boolean editable = compound5.editable.isSelected();
|
||||
compound5.textfield1.setEditable(editable);
|
||||
compound5.textfield2.setEditable(editable);
|
||||
compound5.textfield3.setEditable(editable);
|
||||
}
|
||||
else if (e.getActionCommand().equals("ENABLED6"))
|
||||
{
|
||||
boolean enabled = compound6.enabled.isSelected();
|
||||
compound6.textfield1.setEnabled(enabled);
|
||||
compound6.textfield2.setEnabled(enabled);
|
||||
compound6.textfield3.setEnabled(enabled);
|
||||
}
|
||||
else if (e.getActionCommand().equals("EDITABLE6"))
|
||||
{
|
||||
boolean editable = compound6.editable.isSelected();
|
||||
compound6.textfield1.setEditable(editable);
|
||||
compound6.textfield2.setEditable(editable);
|
||||
compound6.textfield3.setEditable(editable);
|
||||
}
|
||||
else if (e.getActionCommand().equals("ENABLED7"))
|
||||
{
|
||||
boolean enabled = compound7.enabled.isSelected();
|
||||
compound7.textfield1.setEnabled(enabled);
|
||||
compound7.textfield2.setEnabled(enabled);
|
||||
compound7.textfield3.setEnabled(enabled);
|
||||
}
|
||||
else if (e.getActionCommand().equals("EDITABLE7"))
|
||||
{
|
||||
boolean editable = compound7.editable.isSelected();
|
||||
compound7.textfield1.setEditable(editable);
|
||||
compound7.textfield2.setEditable(editable);
|
||||
compound7.textfield3.setEditable(editable);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
TextFieldDemo app = new TextFieldDemo("TextField Demo");
|
||||
app.initFrameContent();
|
||||
app.pack();
|
||||
app.setVisible(true);
|
||||
SwingUtilities.invokeLater
|
||||
(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
TextFieldDemo app = new TextFieldDemo();
|
||||
app.initFrameContent();
|
||||
JFrame frame = new JFrame("TextField demo");
|
||||
frame.getContentPane().add(app);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a TextFieldDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a TextFieldDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new TextFieldDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
static class Compound
|
||||
{
|
||||
JTextField textfield1;
|
||||
JTextField textfield2;
|
||||
JTextField textfield3;
|
||||
JCheckBox enabled;
|
||||
JCheckBox editable;
|
||||
JPanel textFieldPanel;
|
||||
JPanel panel;
|
||||
|
||||
/** Creates and initializes the textfields with the same text and
|
||||
* alignment but with a different font.
|
||||
*
|
||||
* @param title The text for the textfields.
|
||||
* @param align The alignment for the textfields.
|
||||
* @param fonts The fonts to be used for the textfields.
|
||||
*/
|
||||
void setupTextfields(String title, int align, Font[] fonts)
|
||||
{
|
||||
textfield1 = new JTextField(title);
|
||||
textfield1.setHorizontalAlignment(align);
|
||||
textfield1.setFont(fonts[0]);
|
||||
textFieldPanel.add(textfield1);
|
||||
|
||||
textfield2 = new JTextField(title);
|
||||
textfield2.setHorizontalAlignment(align);
|
||||
textfield2.setFont(fonts[1]);
|
||||
textFieldPanel.add(textfield2);
|
||||
|
||||
textfield3 = new JTextField(title);
|
||||
textfield3.setHorizontalAlignment(align);
|
||||
textfield3.setFont(fonts[2]);
|
||||
textFieldPanel.add(textfield3);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,291 @@
|
||||
/* TreeDemo.java -- Demostrates JTree
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
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.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package gnu.classpath.examples.swing;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.JobAttributes.DefaultSelectionType;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.DebugGraphics;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JTree;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.event.TreeSelectionEvent;
|
||||
import javax.swing.event.TreeSelectionListener;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import javax.swing.tree.DefaultTreeModel;
|
||||
import javax.swing.tree.DefaultTreeSelectionModel;
|
||||
import javax.swing.tree.TreePath;
|
||||
import javax.swing.tree.TreeSelectionModel;
|
||||
|
||||
public class TreeDemo
|
||||
extends JPanel
|
||||
implements ActionListener
|
||||
{
|
||||
|
||||
TreeDemo()
|
||||
{
|
||||
super();
|
||||
createContent();
|
||||
}
|
||||
|
||||
private void createContent()
|
||||
{
|
||||
// non-leafs
|
||||
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Exotic Subsistence");
|
||||
DefaultMutableTreeNode fruit = new DefaultMutableTreeNode("Interesting Fruit");
|
||||
DefaultMutableTreeNode veg = new DefaultMutableTreeNode("Extraordinary Vegetables");
|
||||
DefaultMutableTreeNode liq = new DefaultMutableTreeNode("Peculiar Liquids");
|
||||
|
||||
// leafs
|
||||
DefaultMutableTreeNode f1 = new DefaultMutableTreeNode("Abiu");
|
||||
DefaultMutableTreeNode f2 = new DefaultMutableTreeNode("Bamboo Shoots");
|
||||
DefaultMutableTreeNode f3 = new DefaultMutableTreeNode("Breadfruit");
|
||||
DefaultMutableTreeNode f4 = new DefaultMutableTreeNode("Canistel");
|
||||
DefaultMutableTreeNode f5 = new DefaultMutableTreeNode("Duku");
|
||||
DefaultMutableTreeNode f6 = new DefaultMutableTreeNode("Guava");
|
||||
DefaultMutableTreeNode f7 = new DefaultMutableTreeNode("Jakfruit");
|
||||
DefaultMutableTreeNode f8 = new DefaultMutableTreeNode("Quaribea");
|
||||
|
||||
DefaultMutableTreeNode v1 = new DefaultMutableTreeNode("Amaranth");
|
||||
DefaultMutableTreeNode v2 = new DefaultMutableTreeNode("Kiwano");
|
||||
DefaultMutableTreeNode v3 = new DefaultMutableTreeNode("Leeks");
|
||||
DefaultMutableTreeNode v4 = new DefaultMutableTreeNode("Luffa");
|
||||
DefaultMutableTreeNode v5 = new DefaultMutableTreeNode("Chayote");
|
||||
DefaultMutableTreeNode v6 = new DefaultMutableTreeNode("Jicama");
|
||||
DefaultMutableTreeNode v7 = new DefaultMutableTreeNode("Okra");
|
||||
|
||||
DefaultMutableTreeNode l1 = new DefaultMutableTreeNode("Alcoholic");
|
||||
DefaultMutableTreeNode l11 = new DefaultMutableTreeNode("Caipirinha");
|
||||
DefaultMutableTreeNode l21 = new DefaultMutableTreeNode("Mojito");
|
||||
DefaultMutableTreeNode l31 = new DefaultMutableTreeNode("Margarita");
|
||||
DefaultMutableTreeNode l41 = new DefaultMutableTreeNode("Martini");
|
||||
DefaultMutableTreeNode l5 = new DefaultMutableTreeNode("Non Alcoholic");
|
||||
DefaultMutableTreeNode l55 = new DefaultMutableTreeNode("Babaji");
|
||||
DefaultMutableTreeNode l65 = new DefaultMutableTreeNode("Chikita");
|
||||
|
||||
root.add(fruit);
|
||||
root.add(veg);
|
||||
root.add(liq);
|
||||
fruit.add(f1);
|
||||
fruit.add(f2);
|
||||
fruit.add(f3);
|
||||
fruit.add(f4);
|
||||
fruit.add(f5);
|
||||
fruit.add(f6);
|
||||
fruit.add(f7);
|
||||
fruit.add(f8);
|
||||
veg.add(v1);
|
||||
veg.add(v2);
|
||||
veg.add(v3);
|
||||
veg.add(v4);
|
||||
veg.add(v5);
|
||||
veg.add(v6);
|
||||
veg.add(v7);
|
||||
liq.add(l1);
|
||||
l1.add(l11);
|
||||
l1.add(l21);
|
||||
l1.add(l31);
|
||||
l1.add(l41);
|
||||
liq.add(l5);
|
||||
l5.add(l55);
|
||||
l5.add(l65);
|
||||
|
||||
final JTree tree = new JTree(root);
|
||||
tree.setLargeModel(true);
|
||||
tree.setEditable(true);
|
||||
final DefaultTreeSelectionModel selModel = new DefaultTreeSelectionModel();
|
||||
selModel.setSelectionMode(
|
||||
DefaultTreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
|
||||
tree.setSelectionModel(selModel);
|
||||
|
||||
// buttons to add and delete
|
||||
JButton add = new JButton("add element");
|
||||
add.addActionListener(new ActionListener()
|
||||
{
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
for (int i = 0; i < tree.getRowCount(); i++)
|
||||
{
|
||||
if (tree.isRowSelected(i))
|
||||
{
|
||||
TreePath p = tree.getPathForRow(i);
|
||||
DefaultMutableTreeNode n = (DefaultMutableTreeNode) p.
|
||||
getLastPathComponent();
|
||||
n.add(new DefaultMutableTreeNode("New Element"));
|
||||
|
||||
// The expansion state of the parent node does not change
|
||||
// by default. We will expand it manually, to ensure that the
|
||||
// added node is immediately visible.
|
||||
tree.expandPath(p);
|
||||
|
||||
// Refresh the tree (.repaint would be not enough both in
|
||||
// Classpath and Sun implementations).
|
||||
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
|
||||
model.reload(n);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Demonstration of the various selection modes
|
||||
final JCheckBox cbSingle = new JCheckBox("single selection");
|
||||
cbSingle.addActionListener(new ActionListener()
|
||||
{
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
if (cbSingle.isSelected())
|
||||
selModel.setSelectionMode(
|
||||
DefaultTreeSelectionModel.SINGLE_TREE_SELECTION);
|
||||
else
|
||||
selModel.setSelectionMode(
|
||||
DefaultTreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
|
||||
}
|
||||
});
|
||||
|
||||
// Demonstration of the root visibility changes
|
||||
final JCheckBox cbRoot = new JCheckBox("root");
|
||||
cbRoot.addActionListener(new ActionListener()
|
||||
{
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
tree.setRootVisible(cbRoot.isSelected());
|
||||
}
|
||||
});
|
||||
cbRoot.setSelected(true);
|
||||
|
||||
// Demonstration of the tree selection listener.
|
||||
final JLabel choice = new JLabel("Make a choice");
|
||||
tree.getSelectionModel().addTreeSelectionListener(
|
||||
new TreeSelectionListener()
|
||||
{
|
||||
public void valueChanged(TreeSelectionEvent event)
|
||||
{
|
||||
TreePath was = event.getOldLeadSelectionPath();
|
||||
TreePath now = event.getNewLeadSelectionPath();
|
||||
String swas =
|
||||
was == null ? "none":was.getLastPathComponent().toString();
|
||||
String snow =
|
||||
now == null ? "none":now.getLastPathComponent().toString();
|
||||
choice.setText("From "+swas+" to "+snow);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
JPanel p2 = new JPanel();
|
||||
p2.add(add);
|
||||
p2.add(cbSingle);
|
||||
p2.add(cbRoot);
|
||||
|
||||
tree.getSelectionModel().
|
||||
setSelectionMode(DefaultTreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
|
||||
|
||||
add(p2, BorderLayout.NORTH);
|
||||
add(new JScrollPane(tree), BorderLayout.CENTER);
|
||||
add(choice, BorderLayout.SOUTH);
|
||||
}
|
||||
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
if (e.getActionCommand().equals("CLOSE"))
|
||||
{
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
SwingUtilities.invokeLater
|
||||
(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
TreeDemo app = new TreeDemo();
|
||||
app.initFrameContent();
|
||||
JFrame frame = new JFrame("Tree Demo");
|
||||
frame.getContentPane().add(app);
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DemoFactory that creates a TreeDemo.
|
||||
*
|
||||
* @return a DemoFactory that creates a TreeDemo
|
||||
*/
|
||||
public static DemoFactory createDemoFactory()
|
||||
{
|
||||
return new DemoFactory()
|
||||
{
|
||||
public JComponent createDemo()
|
||||
{
|
||||
return new TreeDemo();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user