summaryrefslogtreecommitdiff
path: root/libs/FLib/TableLayout
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2009-03-04 17:31:40 +0000
committerPaul Buetow <paul@buetow.org>2009-03-04 17:31:40 +0000
commit9129838d208c0df7293e5b757661125545cd6df8 (patch)
treecde0b095a7ad120b68450f705d8fc16d278bfff8 /libs/FLib/TableLayout
parente2c501ba5aaffd9d5ace6bc1706353d9f83329b7 (diff)
flib added
Diffstat (limited to 'libs/FLib/TableLayout')
-rw-r--r--libs/FLib/TableLayout/License.txt123
-rw-r--r--libs/FLib/TableLayout/README.txt34
-rw-r--r--libs/FLib/TableLayout/build.xml120
-rw-r--r--libs/FLib/TableLayout/doc-templates/License.html180
-rw-r--r--libs/FLib/TableLayout/doc/example/Example1.java180
-rw-r--r--libs/FLib/TableLayout/doc/example/TableExplorer.java1230
-rw-r--r--libs/FLib/TableLayout/doc/examples.html76
-rw-r--r--libs/FLib/TableLayout/doc/features.html55
-rw-r--r--libs/FLib/TableLayout/doc/images/Logo.pngbin0 -> 62326 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/screenshot1.pngbin0 -> 2523 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/screenshot2.pngbin0 -> 3997 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial1.pngbin0 -> 1245 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial2.pngbin0 -> 1724 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial3.pngbin0 -> 1797 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial4.pngbin0 -> 1765 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial5.pngbin0 -> 1433 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial6.pngbin0 -> 1048 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial7.pngbin0 -> 821 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial8.pngbin0 -> 923 bytes
-rw-r--r--libs/FLib/TableLayout/doc/index.html64
-rw-r--r--libs/FLib/TableLayout/doc/resources.html68
-rw-r--r--libs/FLib/TableLayout/doc/screenshots.html48
-rw-r--r--libs/FLib/TableLayout/doc/stylesheet.css48
-rw-r--r--libs/FLib/TableLayout/doc/tutorial.html338
-rw-r--r--libs/FLib/TableLayout/org/freixas/tablelayout/TableLayout.java2049
-rw-r--r--libs/FLib/TableLayout/project.dtd5193
26 files changed, 9806 insertions, 0 deletions
diff --git a/libs/FLib/TableLayout/License.txt b/libs/FLib/TableLayout/License.txt
new file mode 100644
index 0000000..be12e9d
--- /dev/null
+++ b/libs/FLib/TableLayout/License.txt
@@ -0,0 +1,123 @@
+ Artistic License
+
+Preamble
+
+The intent of this document is to state the conditions under which a
+Package may be copied, such that the Copyright Holder maintains some
+semblance of artistic control over the development of the package,
+while giving the users of the package the right to use and distribute
+the Package in a more-or-less customary fashion, plus the right to
+make reasonable modifications.
+
+Definitions:
+
+ * "Package" refers to the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection of files
+ created through textual modification.
+
+ * "Standard Version" refers to such a Package if it has not been
+ modified, or has been modified in accordance with the wishes of
+ the Copyright Holder.
+
+ * "Copyright Holder" is whoever is named in the copyright or
+ copyrights for the package.
+
+ * "You" is you, if you're thinking about copying or distributing
+ this Package.
+
+ * "Reasonable copying fee" is whatever you can justify on the
+ basis of media cost, duplication charges, time of people
+ involved, and so on. (You will not be required to justify it to
+ the Copyright Holder, but only to the computing community at
+ large as a market that must bear the fee.)
+
+ * "Freely Available" means that no fee is charged for the item
+ itself, though there may be fees involved in handling the item.
+ It also means that recipients of the item may redistribute it
+ under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of
+ the Standard Version of this Package without restriction, provided
+ that you duplicate all of the original copyright notices and
+ associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications
+ derived from the Public Domain or from the Copyright Holder. A
+ Package modified in such a way shall still be considered the
+ Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way,
+ provided that you insert a prominent notice in each changed file
+ stating how and when you changed that file, and provided that you
+ do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make
+ them Freely Available, such as by posting said modifications to
+ Usenet or an equivalent medium, or placing the modifications on
+ a major archive site such as ftp.uu.net, or by allowing the
+ Copyright Holder to include your modifications in the Standard
+ Version of the Package.
+
+ b) use the modified Package only within your corporation or
+ organization.
+
+ c) rename any non-standard executables so the names do not
+ conflict with standard executables, which must also be
+ provided, and provide a separate manual page for each
+ non-standard executable that clearly documents how it differs
+ from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or
+ executable form, provided that you do at least ONE of the
+ following:
+
+ a) distribute a Standard Version of the executables and library
+ files, together with instructions (in the manual page or
+ equivalent) on where to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of
+ the Package with your modifications.
+
+ c) accompany any non-standard executables with their corresponding
+ Standard Version executables, giving the non-standard
+ executables non-standard names, and clearly documenting the
+ differences in manual pages (or equivalent), together with
+ instructions on where to get the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of
+ this Package. You may charge any fee you choose for support of this
+ Package. You may not charge a fee for this Package itself. However,
+ you may distribute this Package in aggregate with other (possibly
+ commercial) programs as part of a larger (possibly commercial)
+ software distribution provided that you do not advertise this
+ Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as
+ output from the programs of this Package do not automatically fall
+ under the copyright of this Package, but belong to whomever
+ generated them, and may be sold commercially, and may be aggregated
+ with this Package.
+
+7. C or perl subroutines supplied by you and linked into this Package
+ shall not be considered part of this Package.
+
+8. Aggregation of this Package with a commercial distribution is
+ always permitted provided that the use of this Package is embedded;
+ that is, when no overt attempt is made to make this Package's
+ interfaces visible to the end user of the commercial distribution.
+ Such use shall not be construed as a distribution of this Package.
+
+9. The name of the Copyright Holder may not be used to endorse or
+ promote products derived from this software without specific prior
+ written permission.
+
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.
+
+The End
diff --git a/libs/FLib/TableLayout/README.txt b/libs/FLib/TableLayout/README.txt
new file mode 100644
index 0000000..6a3ac6e
--- /dev/null
+++ b/libs/FLib/TableLayout/README.txt
@@ -0,0 +1,34 @@
+ TableLayout
+
+This package provides a TableLayout manager for use in Java programs.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the Artistic License. You should have received a
+copy of the Artistic License along with this program (in file
+License.txt). If not, a copy is available at
+
+ http://opensource.org/licenses/artistic-license.php
+
+To build it you'll need Ant. I used version 1.6.2. Use
+
+ ant all
+
+This will create build/tablelayout.jar. To create the API
+documentation, use
+
+ ant javadoc
+
+To view all the documentation, view doc/index.html.
+
+There is a tutorial in doc/tutorial.html. There is also a sample Java
+program that uses the TableLayout class. You can build and run this
+program with
+
+ ant runExample1
+
+In addition, there is a tool you can use to practice using the
+TableLayout. It's called TableExplorer and follows the approach of a
+similar tool written for the GridBagLayout. Build and run this program
+with
+
+ ant runTableExplorer
diff --git a/libs/FLib/TableLayout/build.xml b/libs/FLib/TableLayout/build.xml
new file mode 100644
index 0000000..99384a6
--- /dev/null
+++ b/libs/FLib/TableLayout/build.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE project PUBLIC "-//ANT//DTD project//EN" "project.dtd">
+
+<project basedir="." default="all" name="TableLayout">
+
+ <!-- Set up the classpath for compilation and execution -->
+
+ <path id="project.class.path">
+ <pathelement location="."/>
+ </path>
+
+ <!-- Common settings for all targets -->
+
+ <target name="init" description="Initialize.">
+ <tstamp/>
+ </target>
+
+ <!-- Compile everything -->
+
+ <target depends="init" name="compile" description="Compile the project.">
+ <javac debug="true" deprecation="true" destdir="." srcdir=".">
+ <include name="org/freixas/**"/>
+ <include name="doc/example/**"/>
+ <classpath refid="project.class.path"/>
+ </javac>
+ </target>
+
+ <!-- Place the class files in a jar file -->
+
+ <target depends="compile" name="jar" description="Create a jar file.">
+ <mkdir dir="build"/>
+ <jar basedir="." compress="false" jarfile="build/tablelayout.jar">
+ <manifest>
+ <attribute name="Built-By" value="${user.name}"/>
+ <section name="TableLayout">
+ <attribute name="Specification-Title" value="TableLayout Library"/>
+ <attribute name="Specification-Version" value="${version}"/>
+ <attribute name="Implementation-Title" value="TableLayout"/>
+ <attribute name="Implementation-Version" value="${version} ${TODAY}"/>
+ </section>
+ </manifest>
+ <exclude name="**/*.java"/>
+ <exclude name="doc"/>
+ <exclude name="build"/>
+ <include name="org/freixas/tablelayout/*.class"/>
+ <include name="**/*.gif"/>
+ <include name="**/*.properties"/>
+ </jar>
+ </target>
+
+ <!-- Build all -->
+
+ <target depends="jar" name="all" description="Build everything.">
+ <echo message="TableLayout library built."/>
+ </target>
+
+ <!-- Run Example1 -->
+
+ <target depends="compile" name="runExample1" description="Run Example1.">
+ <java classname="doc.example.Example1" failonerror="true" fork="true">
+ <classpath refid="project.class.path"/>
+ </java>
+ </target>
+
+ <!-- Run TableExplorer -->
+
+ <target depends="compile" name="runTableExplorer" description="Run TableExplorer.">
+ <java classname="doc.example.TableExplorer" failonerror="true" fork="true">
+ <classpath refid="project.class.path"/>
+ </java>
+ </target>
+
+ <!-- Build the documentation -->
+
+ <target depends="init" name="javadoc" description="Javadoc for TableLayout.">
+ <mkdir dir="doc/api"/>
+ <copy todir="doc/api">
+ <fileset dir="doc-templates">
+ <include name="**/*.html"/>
+ </fileset>
+ </copy>
+ <javadoc
+ sourcepath="org"
+ destdir="doc/api"
+ use="true"
+ author="true"
+ windowtitle="TableLayout"
+ footer="&lt;small&gt;Copyright &#169; 2000-2005 Credence Systems Corporation&lt;br&gt;Licensed under the &lt;a href='{@docRoot}/License.html' target='_top'&gt;Artistic License&lt;/a&gt;&lt;/small&gt;">
+ <classpath refid="project.class.path"/>
+ <packageset dir=".">
+ <include name="org/freixas/**"/>
+ </packageset>
+ <link href="http://java.sun.com/j2se/1.5/docs/api/" />
+ </javadoc>
+ </target>
+
+ <!-- Clean the build tree -->
+
+ <target depends="init" name="clean" description="Clean all build products.">
+ <delete>
+ <fileset dir="org/freixas">
+ <include name="**/*.class"/>
+ </fileset>
+ </delete>
+ <delete>
+ <fileset dir="doc/example">
+ <include name="**/*.class"/>
+ </fileset>
+ </delete>
+ <delete dir="build"/>
+ <delete dir="doc/api"/>
+ </target>
+
+ <!-- Generate a DTD for this buildfile -->
+
+ <target name="dtd" description="Generate a DTD">
+ <antstructure output="project.dtd"/>
+ </target>
+
+</project>
diff --git a/libs/FLib/TableLayout/doc-templates/License.html b/libs/FLib/TableLayout/doc-templates/License.html
new file mode 100644
index 0000000..d5fbdc1
--- /dev/null
+++ b/libs/FLib/TableLayout/doc-templates/License.html
@@ -0,0 +1,180 @@
+<html>
+ <style type="text/css">
+ body {
+ font-family: Arial, Helvetica, sans-serif;
+ }
+
+ h1 {
+ text-align: center;
+ font-weight: bold;
+ font-size: 145%;
+ }
+
+ h2 {
+ text-align: left;
+ font-weight: bold;
+ font-size: 120%;
+ }
+
+ ol {
+ list-style-type: decimal;
+ }
+
+ ol ol {
+ list-style-type: lower-alpha;
+ }
+
+ li {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ }
+
+ </style>
+</head>
+
+ <body>
+
+ <h1>Artistic License</h1>
+
+ <h2>Preamble</h2>
+
+ <p>The intent of this document is to state the conditions under which a
+ Package may be copied, such that the Copyright Holder maintains some
+ semblance of artistic control over the development of the package,
+ while giving the users of the package the right to use and distribute
+ the Package in a more-or-less customary fashion, plus the right to
+ make reasonable modifications.</p>
+
+ <h2>Definitions:</h2>
+
+ <ul>
+
+ <li>"Package" refers to the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection of files created
+ through textual modification.</li>
+
+ <li>"Standard Version" refers to such a Package if it has not been
+ modified, or has been modified in accordance with the wishes of the
+ Copyright Holder.</li>
+
+ <li>"Copyright Holder" is whoever is named in the copyright or
+ copyrights for the package.</li>
+
+ <li>"You" is you, if you're thinking about copying or distributing
+ this Package.</li>
+
+ <li>"Reasonable copying fee" is whatever you can justify on the basis
+ of media cost, duplication charges, time of people involved, and so
+ on. (You will not be required to justify it to the Copyright Holder,
+ but only to the computing community at large as a market that must
+ bear the fee.)</li>
+
+ <li>"Freely Available" means that no fee is charged for the item
+ itself, though there may be fees involved in handling the item. It
+ also means that recipients of the item may redistribute it under the
+ same conditions they received it.</li>
+
+ </ul>
+
+ <hr>
+
+ <ol>
+
+ <li>You may make and give away verbatim copies of the source form of
+ the Standard Version of this Package without restriction, provided
+ that you duplicate all of the original copyright notices and
+ associated disclaimers.</li>
+
+ <li>You may apply bug fixes, portability fixes and other modifications
+ derived from the Public Domain or from the Copyright Holder. A Package
+ modified in such a way shall still be considered the Standard
+ Version.</li>
+
+ <li>You may otherwise modify your copy of this Package in any way,
+ provided that you insert a prominent notice in each changed file
+ stating how and when you changed that file, and provided that you do
+ at least ONE of the following:
+
+ <ol>
+
+ <li>place your modifications in the Public Domain or otherwise make
+ them Freely Available, such as by posting said modifications to Usenet
+ or an equivalent medium, or placing the modifications on a major
+ archive site such as ftp.uu.net, or by allowing the Copyright Holder
+ to include your modifications in the Standard Version of the Package.</li>
+
+ <li>use the modified Package only within your corporation or
+ organization.</li>
+
+ <li>rename any non-standard executables so the names do not conflict
+ with standard executables, which must also be provided, and provide a
+ separate manual page for each non-standard executable that clearly
+ documents how it differs from the Standard Version.</li>
+
+ <li>make other distribution arrangements with the Copyright
+ Holder.</li>
+
+ </ol>
+ </li>
+
+ <li>You may distribute the programs of this Package in object code or
+ executable form, provided that you do at least ONE of the following:
+
+ <ol>
+
+ <li>distribute a Standard Version of the executables and library
+ files, together with instructions (in the manual page or equivalent)
+ on where to get the Standard Version.</li>
+
+ <li>accompany the distribution with the machine-readable source of the
+ Package with your modifications.</li>
+
+ <li>accompany any non-standard executables with their corresponding
+ Standard Version executables, giving the non-standard executables
+ non-standard names, and clearly documenting the differences in manual
+ pages (or equivalent), together with instructions on where to get the
+ Standard Version.</li>
+
+ <li>make other distribution arrangements with the Copyright
+ Holder.</li>
+
+ </ol>
+ </li>
+
+ <li>You may charge a reasonable copying fee for any distribution of
+ this Package. You may charge any fee you choose for support of this
+ Package. You may not charge a fee for this Package itself. However,
+ you may distribute this Package in aggregate with other (possibly
+ commercial) programs as part of a larger (possibly commercial)
+ software distribution provided that you do not advertise this Package
+ as a product of your own.</li>
+
+ <li>The scripts and library files supplied as input to or produced as
+ output from the programs of this Package do not automatically fall
+ under the copyright of this Package, but belong to whomever generated
+ them, and may be sold commercially, and may be aggregatedwith this
+ Package.</li>
+
+ <li>r perl subroutines supplied by you and linked into this Package
+ shall not be considered part of this Package.</li>
+
+ <li>Aggregation of this Package with a commercial distribution is
+ always permitted provided that the use of this Package is embedded;
+ that is, when no overt attempt is made to make this Package's
+ interfaces visible to the end user of the commercial distribution.
+ Such use shall not be construed as a distribution of this Package.</li>
+
+ <li>The name of the Copyright Holder may not be used to endorse or
+ promote products derived from this software without specific prior
+ written permission.</li>
+
+ <li>THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.</li>
+
+ </ol>
+
+ <p>The End</p>
+ </body>
+</html>
diff --git a/libs/FLib/TableLayout/doc/example/Example1.java b/libs/FLib/TableLayout/doc/example/Example1.java
new file mode 100644
index 0000000..797d1e7
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/example/Example1.java
@@ -0,0 +1,180 @@
+//**********************************************************************
+// Package
+//**********************************************************************
+
+package doc.example;
+
+//**********************************************************************
+// Import list
+//**********************************************************************
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+
+import org.freixas.tablelayout.*;
+
+/**
+ * This example compares the GridBagLayout to the TableLayout. The
+ * same layout is created using each layout manager. The layouts are
+ * displayed in their own window.
+ *
+ * @author Antonio Freixas
+ */
+
+// Copyright © 2004 Antonio Freixas
+// All Rights Reserved.
+
+public class Example1
+{
+
+//**********************************************************************
+// Public Constants
+//**********************************************************************
+
+//**********************************************************************
+// Private Constants
+//**********************************************************************
+
+//**********************************************************************
+// Private Members
+//**********************************************************************
+
+//**********************************************************************
+// main
+//**********************************************************************
+
+public static void
+main(
+ String[] args)
+{
+ new Example1();
+}
+
+//**********************************************************************
+// Constructors
+//**********************************************************************
+
+/**
+ * Create the two windows and display them.
+ */
+
+public
+Example1()
+{
+ JFrame frame1 = createGridBagLayout();
+ JFrame frame2 = createTableLayout();
+ frame1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+ frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+ frame1.pack();
+ frame2.pack();
+ frame1.setLocation(10, 100);
+ frame2.setLocation(400, 100);
+ frame1.setVisible(true);
+ frame2.setVisible(true);
+}
+
+//**********************************************************************
+// Private
+//**********************************************************************
+
+/**
+ * Create the layout using GridBagLayout. This code comes from the API
+ * page for GridBagLayout.
+ *
+ * @return The JFrame containing the layout.
+ */
+
+public JFrame
+createGridBagLayout()
+{
+ JFrame frame = new JFrame("GridBagLayout");
+
+ GridBagLayout gridbag = new GridBagLayout();
+ GridBagConstraints c = new GridBagConstraints();
+
+ JPanel panel = new JPanel(gridbag);
+ frame.getContentPane().add(panel);
+
+ c.fill = GridBagConstraints.BOTH;
+ c.weightx = 1.0;
+ makebutton(panel, "Button1", gridbag, c);
+ makebutton(panel, "Button2", gridbag, c);
+ makebutton(panel, "Button3", gridbag, c);
+
+ c.gridwidth = GridBagConstraints.REMAINDER; //end row
+ makebutton(panel, "Button4", gridbag, c);
+
+ c.weightx = 0.0; //reset to the default
+ makebutton(panel, "Button5", gridbag, c); //another row
+
+ c.gridwidth = GridBagConstraints.RELATIVE; //next-to-last in row
+ makebutton(panel, "Button6", gridbag, c);
+
+ c.gridwidth = GridBagConstraints.REMAINDER; //end row
+ makebutton(panel, "Button7", gridbag, c);
+
+ c.gridwidth = 1; //reset to the default
+ c.gridheight = 2;
+ c.weighty = 1.0;
+ makebutton(panel, "Button8", gridbag, c);
+
+ c.weighty = 0.0; //reset to the default
+ c.gridwidth = GridBagConstraints.REMAINDER; //end row
+ c.gridheight = 1; //reset to the default
+ makebutton(panel, "Button9", gridbag, c);
+ makebutton(panel, "Button10", gridbag, c);
+
+ return frame;
+}
+
+/**
+ * Helper method for createGridBagLayout().
+ *
+ * @param panel The panel to add the button to.
+ * @param name The button's label.
+ * @param gridbag The GridBagLayout to use.
+ * @param c The constraints to use.
+ */
+
+private void
+makebutton(
+ JPanel panel,
+ String name,
+ GridBagLayout gridbag,
+ GridBagConstraints c)
+{
+ JButton button = new JButton(name);
+ gridbag.setConstraints(button, c);
+ panel.add(button);
+}
+
+/**
+ * Create the layout using TableLayout.
+ *
+ * @return The JFrame containing the layout.
+ */
+
+public JFrame
+createTableLayout()
+{
+ JFrame frame = new JFrame("TableLayout");
+
+ JPanel panel = new JPanel(new TableLayout("cols=4"));
+ frame.getContentPane().add(panel);
+
+ panel.add(new JButton("Button1"));
+ panel.add(new JButton("Button2"));
+ panel.add(new JButton("Button3"));
+ panel.add(new JButton("Button4"));
+ panel.add(new JButton("Button5"), "cspan=4");
+ panel.add(new JButton("Button6"), "cspan=3");
+ panel.add(new JButton("Button7"));
+ panel.add(new JButton("Button8"), "rspan=2");
+ panel.add(new JButton("Button9"), "cspan=3");
+ panel.add(new JButton("Button10"), "cspan=3 rweight=1");
+
+ return frame;
+}
+
+}
diff --git a/libs/FLib/TableLayout/doc/example/TableExplorer.java b/libs/FLib/TableLayout/doc/example/TableExplorer.java
new file mode 100644
index 0000000..d66c497
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/example/TableExplorer.java
@@ -0,0 +1,1230 @@
+//**********************************************************************
+// Package
+//**********************************************************************
+
+package doc.example;
+
+//**********************************************************************
+// Import list
+//**********************************************************************
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import javax.swing.event.*;
+import java.util.*;
+
+import org.freixas.tablelayout.*;
+
+/**
+ * This class allows a user to dynamically alter a set of components
+ * using the TableLayout class to explore the layout's abilities.
+ *
+ * @author Antonio Freixas
+ */
+
+public class TableExplorer
+ extends JFrame
+ implements CaretListener, ActionListener, ListSelectionListener,
+ FocusListener, MenuListener
+{
+
+//**********************************************************************
+// Constants
+//**********************************************************************
+
+static final String[] tablePositionList = {
+ "Default",
+ "tn", "tne", "tnw",
+ "ts", "tse", "tsw",
+ "te", "tw", "tc"
+};
+
+static final String[] tableFillList = {
+ "Default", "tfh", "tfv", "tf"
+};
+
+static final String[] positionList = {
+ "Default",
+ "n", "ne", "nw",
+ "s", "se", "sw",
+ "e", "w", "c"
+};
+
+static final String[] fillList = {
+ "Default", "fh", "fv", "f"
+};
+
+//**********************************************************************
+// Fields
+//**********************************************************************
+
+JFrame layout;
+JPanel layoutPane;
+JFrame code;
+JPanel codePane;
+
+HashMap compHash = new HashMap();
+HashMap attrHash = new HashMap();
+
+JMenu fileMenu;
+JMenu windowMenu;
+JMenu helpMenu;
+
+JMenuItem exitItem;
+JMenuItem previewItem;
+JMenuItem packItem;
+JMenuItem codeItem;
+JMenuItem generateItem;
+JMenuItem aboutItem;
+
+JButton upButton;
+JButton downButton;
+JButton removeButton;
+JButton addButton;
+
+JList compList;
+DefaultListModel compListModel;
+JTextField compEntryField;
+
+JTextField columnsField;
+JTextField[] tableInsetFields = new JTextField[4];
+JTextField rowGapField;
+JTextField colGapField;
+JComboBox tablePositionBox;
+JComboBox tableFillBox;
+
+JTextField[] tableCellInsetFields = new JTextField[4];
+JComboBox tableCellPositionBox;
+JComboBox tableCellFillBox;
+JTextField tableRowWeightField;
+JTextField tableColWeightField;
+
+JTextField tableAttributesField;
+
+JTextField[] insetFields = new JTextField[4];
+JComboBox positionBox;
+JComboBox fillBox;
+JTextField rowWeightField;
+JTextField colWeightField;
+JTextField colPositionField;
+JTextField skipCellsField;
+JTextField rowSpanField;
+JTextField colSpanField;
+
+JTextField cellAttributesField;
+
+JTextArea codeTextArea;
+JScrollPane codeTextScroll;
+
+String textWhenFocusGained = null;
+boolean ignoreEvents = false;
+
+TableAttributes tableAttributes = null;
+
+//**********************************************************************
+// Main
+//**********************************************************************
+
+static public void
+main(
+ String[] args)
+{
+ new TableExplorer();
+}
+
+//**********************************************************************
+// Constructors
+//**********************************************************************
+
+/**
+ * Create the TableExplorer JFrame.
+ */
+
+TableExplorer()
+{
+ super("TableExplorer");
+
+ // Table with three columns
+ // Row 1: Buttons for managing component list
+ // Row 2: Component list
+ // Row 3: Attribute settings
+
+ setJMenuBar(createJMenuBar());
+
+ getContentPane().setLayout(
+ new TableLayout("cols=3 cgap=5 " +
+ "titop=2 tibottom=2 tileft=2 tiright=2"));
+
+ getContentPane().add(createButtonPane());
+ getContentPane().add(createListPane(), "cweight=1");
+ getContentPane().add(createAttributePane(), "n fh");
+
+ pack();
+ setVisible(true);
+
+ layout = new JFrame("Table Layout Preview");
+ layoutPane = (JPanel)layout.getContentPane();
+ layoutPane.setName("DEBUG");
+ layoutPane.setLayout(new TableLayout());
+ layoutPane.setOpaque(true);
+
+ code = new JFrame("Table Layout Code");
+ codePane = createCodePane();
+ code.setContentPane(codePane);
+ code.pack();
+
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+ compEntryField.grabFocus();
+
+ layout.setSize(300, 300);
+}
+
+//**********************************************************************
+// Public
+//**********************************************************************
+
+public void
+caretUpdate(
+ CaretEvent e)
+{
+ if (e.getSource() == compEntryField) {
+ String text = compEntryField.getText();
+ addButton.setEnabled(text.length() > 0);
+ }
+}
+
+public void
+actionPerformed(
+ ActionEvent e)
+{
+ if (ignoreEvents) return;
+
+ if (e.getSource() == addButton ||
+ e.getSource() == compEntryField) {
+
+ String name = compEntryField.getText();
+
+ JButton button = new JButton(name);
+ addToLayout(button);
+ compHash.put(name, button);
+ attrHash.put(name, new Attributes());
+ compListModel.addElement(name);
+ compEntryField.setText("");
+ addButton.setEnabled(false);
+ }
+
+ else if (e.getSource() == removeButton) {
+ String name = (String)compList.getSelectedValue();
+ if (name != null) {
+ Component c = (Component)compHash.get(name);
+ layoutPane.remove(c);
+ compHash.remove(name);
+ attrHash.remove(name);
+ compListModel.removeEle