8198990: Move SwingSet2 from closed to OpenJDK
Reviewed-by: serb, jeff, kaddepalli
@ -242,6 +242,13 @@ $(eval $(call SetupBuildDemo, FileChooserDemo, \
|
|||||||
DEMO_SUBDIR := jfc, \
|
DEMO_SUBDIR := jfc, \
|
||||||
))
|
))
|
||||||
|
|
||||||
|
$(eval $(call SetupBuildDemo, SwingSet2, \
|
||||||
|
DEMO_SUBDIR := jfc, \
|
||||||
|
EXTRA_COPY_TO_JAR := .java, \
|
||||||
|
EXTRA_MANIFEST_ATTR := SplashScreen-Image: resources/images/splash.png, \
|
||||||
|
DISABLE_SJAVAC := true, \
|
||||||
|
))
|
||||||
|
|
||||||
$(eval $(call SetupBuildDemo, Font2DTest, \
|
$(eval $(call SetupBuildDemo, Font2DTest, \
|
||||||
DEMO_SUBDIR := jfc, \
|
DEMO_SUBDIR := jfc, \
|
||||||
))
|
))
|
||||||
|
57
src/demo/share/jfc/SwingSet2/AquaTheme.java
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.plaf.*;
|
||||||
|
import javax.swing.plaf.metal.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class describes a theme using "blue-green" colors.
|
||||||
|
*
|
||||||
|
* @author Steve Wilson
|
||||||
|
*/
|
||||||
|
public class AquaTheme extends DefaultMetalTheme {
|
||||||
|
|
||||||
|
public String getName() { return "Aqua"; }
|
||||||
|
|
||||||
|
private final ColorUIResource primary1 = new ColorUIResource(102, 153, 153);
|
||||||
|
private final ColorUIResource primary2 = new ColorUIResource(128, 192, 192);
|
||||||
|
private final ColorUIResource primary3 = new ColorUIResource(159, 235, 235);
|
||||||
|
|
||||||
|
protected ColorUIResource getPrimary1() { return primary1; }
|
||||||
|
protected ColorUIResource getPrimary2() { return primary2; }
|
||||||
|
protected ColorUIResource getPrimary3() { return primary3; }
|
||||||
|
|
||||||
|
}
|
331
src/demo/share/jfc/SwingSet2/BezierAnimationPanel.java
Normal file
@ -0,0 +1,331 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.font.*;
|
||||||
|
import java.awt.geom.*;
|
||||||
|
import java.awt.image.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BezierAnimationPanel
|
||||||
|
*
|
||||||
|
* @author Jim Graham
|
||||||
|
* @author Jeff Dinkins (removed dynamic setting changes, made swing friendly)
|
||||||
|
*/
|
||||||
|
class BezierAnimationPanel extends JPanel implements Runnable {
|
||||||
|
|
||||||
|
Color backgroundColor = new Color(0, 0, 153);
|
||||||
|
Color outerColor = new Color(255, 255, 255);
|
||||||
|
Color gradientColorA = new Color(255, 0, 101);
|
||||||
|
Color gradientColorB = new Color(255, 255, 0);
|
||||||
|
|
||||||
|
boolean bgChanged = false;
|
||||||
|
|
||||||
|
GradientPaint gradient = null;
|
||||||
|
|
||||||
|
public final int NUMPTS = 6;
|
||||||
|
|
||||||
|
float animpts[] = new float[NUMPTS * 2];
|
||||||
|
|
||||||
|
float deltas[] = new float[NUMPTS * 2];
|
||||||
|
|
||||||
|
float staticpts[] = {
|
||||||
|
50.0f, 0.0f,
|
||||||
|
150.0f, 0.0f,
|
||||||
|
200.0f, 75.0f,
|
||||||
|
150.0f, 150.0f,
|
||||||
|
50.0f, 150.0f,
|
||||||
|
0.0f, 75.0f,
|
||||||
|
};
|
||||||
|
|
||||||
|
float movepts[] = new float[staticpts.length];
|
||||||
|
|
||||||
|
BufferedImage img;
|
||||||
|
|
||||||
|
Rectangle bounds = null;
|
||||||
|
|
||||||
|
Thread anim;
|
||||||
|
|
||||||
|
private final Object lock = new Object();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BezierAnimationPanel Constructor
|
||||||
|
*/
|
||||||
|
public BezierAnimationPanel() {
|
||||||
|
addHierarchyListener(
|
||||||
|
new HierarchyListener() {
|
||||||
|
public void hierarchyChanged(HierarchyEvent e) {
|
||||||
|
if(isShowing()) {
|
||||||
|
start();
|
||||||
|
} else {
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
setBackground(getBackgroundColor());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOpaque() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color getGradientColorA() {
|
||||||
|
return gradientColorA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGradientColorA(Color c) {
|
||||||
|
if(c != null) {
|
||||||
|
gradientColorA = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color getGradientColorB() {
|
||||||
|
return gradientColorB;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGradientColorB(Color c) {
|
||||||
|
if(c != null) {
|
||||||
|
gradientColorB = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color getOuterColor() {
|
||||||
|
return outerColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOuterColor(Color c) {
|
||||||
|
if(c != null) {
|
||||||
|
outerColor = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color getBackgroundColor() {
|
||||||
|
return backgroundColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackgroundColor(Color c) {
|
||||||
|
if(c != null) {
|
||||||
|
backgroundColor = c;
|
||||||
|
setBackground(c);
|
||||||
|
bgChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start() {
|
||||||
|
Dimension size = getSize();
|
||||||
|
for (int i = 0; i < animpts.length; i += 2) {
|
||||||
|
animpts[i + 0] = (float) (Math.random() * size.width);
|
||||||
|
animpts[i + 1] = (float) (Math.random() * size.height);
|
||||||
|
deltas[i + 0] = (float) (Math.random() * 4.0 + 2.0);
|
||||||
|
deltas[i + 1] = (float) (Math.random() * 4.0 + 2.0);
|
||||||
|
if (animpts[i + 0] > size.width / 6.0f) {
|
||||||
|
deltas[i + 0] = -deltas[i + 0];
|
||||||
|
}
|
||||||
|
if (animpts[i + 1] > size.height / 6.0f) {
|
||||||
|
deltas[i + 1] = -deltas[i + 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
anim = new Thread(this);
|
||||||
|
anim.setPriority(Thread.MIN_PRIORITY);
|
||||||
|
anim.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void stop() {
|
||||||
|
anim = null;
|
||||||
|
notify();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void animate(float[] pts, float[] deltas, int index, int limit) {
|
||||||
|
float newpt = pts[index] + deltas[index];
|
||||||
|
if (newpt <= 0) {
|
||||||
|
newpt = -newpt;
|
||||||
|
deltas[index] = (float) (Math.random() * 3.0 + 2.0);
|
||||||
|
} else if (newpt >= (float) limit) {
|
||||||
|
newpt = 2.0f * limit - newpt;
|
||||||
|
deltas[index] = - (float) (Math.random() * 3.0 + 2.0);
|
||||||
|
}
|
||||||
|
pts[index] = newpt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
Thread me = Thread.currentThread();
|
||||||
|
while (getSize().width <= 0) {
|
||||||
|
try {
|
||||||
|
anim.sleep(500);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Graphics2D g2d = null;
|
||||||
|
Graphics2D BufferG2D = null;
|
||||||
|
Graphics2D ScreenG2D = null;
|
||||||
|
BasicStroke solid = new BasicStroke(9.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 9.0f);
|
||||||
|
GeneralPath gp = new GeneralPath(GeneralPath.WIND_NON_ZERO);
|
||||||
|
int rule = AlphaComposite.SRC_OVER;
|
||||||
|
AlphaComposite opaque = AlphaComposite.SrcOver;
|
||||||
|
AlphaComposite blend = AlphaComposite.getInstance(rule, 0.9f);
|
||||||
|
AlphaComposite set = AlphaComposite.Src;
|
||||||
|
int frame = 0;
|
||||||
|
int frametmp = 0;
|
||||||
|
Dimension oldSize = getSize();
|
||||||
|
Shape clippath = null;
|
||||||
|
while (anim == me) {
|
||||||
|
Dimension size = getSize();
|
||||||
|
if (size.width != oldSize.width || size.height != oldSize.height) {
|
||||||
|
img = null;
|
||||||
|
clippath = null;
|
||||||
|
if (BufferG2D != null) {
|
||||||
|
BufferG2D.dispose();
|
||||||
|
BufferG2D = null;
|
||||||
|
}
|
||||||
|
if (ScreenG2D != null) {
|
||||||
|
ScreenG2D.dispose();
|
||||||
|
ScreenG2D = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
oldSize = size;
|
||||||
|
|
||||||
|
if (img == null) {
|
||||||
|
img = (BufferedImage) createImage(size.width, size.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BufferG2D == null) {
|
||||||
|
BufferG2D = img.createGraphics();
|
||||||
|
BufferG2D.setRenderingHint(RenderingHints.KEY_RENDERING,
|
||||||
|
RenderingHints.VALUE_RENDER_DEFAULT);
|
||||||
|
BufferG2D.setClip(clippath);
|
||||||
|
}
|
||||||
|
g2d = BufferG2D;
|
||||||
|
|
||||||
|
float[] ctrlpts;
|
||||||
|
for (int i = 0; i < animpts.length; i += 2) {
|
||||||
|
animate(animpts, deltas, i + 0, size.width);
|
||||||
|
animate(animpts, deltas, i + 1, size.height);
|
||||||
|
}
|
||||||
|
ctrlpts = animpts;
|
||||||
|
int len = ctrlpts.length;
|
||||||
|
gp.reset();
|
||||||
|
int dir = 0;
|
||||||
|
float prevx = ctrlpts[len - 2];
|
||||||
|
float prevy = ctrlpts[len - 1];
|
||||||
|
float curx = ctrlpts[0];
|
||||||
|
float cury = ctrlpts[1];
|
||||||
|
float midx = (curx + prevx) / 2.0f;
|
||||||
|
float midy = (cury + prevy) / 2.0f;
|
||||||
|
gp.moveTo(midx, midy);
|
||||||
|
for (int i = 2; i <= ctrlpts.length; i += 2) {
|
||||||
|
float x1 = (midx + curx) / 2.0f;
|
||||||
|
float y1 = (midy + cury) / 2.0f;
|
||||||
|
prevx = curx;
|
||||||
|
prevy = cury;
|
||||||
|
if (i < ctrlpts.length) {
|
||||||
|
curx = ctrlpts[i + 0];
|
||||||
|
cury = ctrlpts[i + 1];
|
||||||
|
} else {
|
||||||
|
curx = ctrlpts[0];
|
||||||
|
cury = ctrlpts[1];
|
||||||
|
}
|
||||||
|
midx = (curx + prevx) / 2.0f;
|
||||||
|
midy = (cury + prevy) / 2.0f;
|
||||||
|
float x2 = (prevx + midx) / 2.0f;
|
||||||
|
float y2 = (prevy + midy) / 2.0f;
|
||||||
|
gp.curveTo(x1, y1, x2, y2, midx, midy);
|
||||||
|
}
|
||||||
|
gp.closePath();
|
||||||
|
|
||||||
|
synchronized(lock) {
|
||||||
|
g2d.setComposite(set);
|
||||||
|
g2d.setBackground(backgroundColor);
|
||||||
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
|
||||||
|
RenderingHints.VALUE_ANTIALIAS_OFF);
|
||||||
|
|
||||||
|
if(bgChanged || bounds == null) {
|
||||||
|
bounds = new Rectangle(0, 0, getWidth(), getHeight());
|
||||||
|
bgChanged = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// g2d.clearRect(bounds.x-5, bounds.y-5, bounds.x + bounds.width + 5, bounds.y + bounds.height + 5);
|
||||||
|
g2d.clearRect(0, 0, getWidth(), getHeight());
|
||||||
|
|
||||||
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
|
||||||
|
RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
|
g2d.setColor(outerColor);
|
||||||
|
g2d.setComposite(opaque);
|
||||||
|
g2d.setStroke(solid);
|
||||||
|
g2d.draw(gp);
|
||||||
|
g2d.setPaint(gradient);
|
||||||
|
|
||||||
|
if(!bgChanged) {
|
||||||
|
bounds = gp.getBounds();
|
||||||
|
} else {
|
||||||
|
bounds = new Rectangle(0, 0, getWidth(), getHeight());
|
||||||
|
bgChanged = false;
|
||||||
|
}
|
||||||
|
gradient = new GradientPaint(bounds.x, bounds.y, gradientColorA,
|
||||||
|
bounds.x + bounds.width, bounds.y + bounds.height,
|
||||||
|
gradientColorB, true);
|
||||||
|
g2d.setComposite(blend);
|
||||||
|
g2d.fill(gp);
|
||||||
|
}
|
||||||
|
if (g2d == BufferG2D) {
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
++frame;
|
||||||
|
Thread.yield();
|
||||||
|
}
|
||||||
|
if (g2d != null) {
|
||||||
|
g2d.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paint(Graphics g) {
|
||||||
|
synchronized (lock) {
|
||||||
|
Graphics2D g2d = (Graphics2D) g;
|
||||||
|
if (img != null) {
|
||||||
|
g2d.setComposite(AlphaComposite.Src);
|
||||||
|
g2d.drawImage(img, null, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
555
src/demo/share/jfc/SwingSet2/ButtonDemo.java
Normal file
@ -0,0 +1,555 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JButton, JRadioButton, JToggleButton, JCheckBox Demos
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class ButtonDemo extends DemoModule implements ChangeListener {
|
||||||
|
|
||||||
|
JTabbedPane tab;
|
||||||
|
|
||||||
|
JPanel buttonPanel = new JPanel();
|
||||||
|
JPanel checkboxPanel = new JPanel();
|
||||||
|
JPanel radioButtonPanel = new JPanel();
|
||||||
|
JPanel toggleButtonPanel = new JPanel();
|
||||||
|
|
||||||
|
Vector buttons = new Vector();
|
||||||
|
Vector checkboxes = new Vector();
|
||||||
|
Vector radiobuttons = new Vector();
|
||||||
|
Vector togglebuttons = new Vector();
|
||||||
|
|
||||||
|
Vector currentControls = buttons;
|
||||||
|
|
||||||
|
JButton button;
|
||||||
|
JCheckBox check;
|
||||||
|
JRadioButton radio;
|
||||||
|
JToggleButton toggle;
|
||||||
|
|
||||||
|
EmptyBorder border5 = new EmptyBorder(5,5,5,5);
|
||||||
|
EmptyBorder border10 = new EmptyBorder(10,10,10,10);
|
||||||
|
|
||||||
|
ItemListener buttonDisplayListener = null;
|
||||||
|
ItemListener buttonPadListener = null;
|
||||||
|
|
||||||
|
Insets insets0 = new Insets(0,0,0,0);
|
||||||
|
Insets insets10 = new Insets(10,10,10,10);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ButtonDemo demo = new ButtonDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ButtonDemo Constructor
|
||||||
|
*/
|
||||||
|
public ButtonDemo(SwingSet2 swingset) {
|
||||||
|
// Set the title for this demo, and an icon used to represent this
|
||||||
|
// demo inside the SwingSet2 app.
|
||||||
|
super(swingset, "ButtonDemo", "toolbar/JButton.gif");
|
||||||
|
|
||||||
|
tab = new JTabbedPane();
|
||||||
|
tab.getModel().addChangeListener(this);
|
||||||
|
|
||||||
|
JPanel demo = getDemoPanel();
|
||||||
|
demo.setLayout(new BoxLayout(demo, BoxLayout.Y_AXIS));
|
||||||
|
demo.add(tab);
|
||||||
|
|
||||||
|
addButtons();
|
||||||
|
addRadioButtons();
|
||||||
|
addCheckBoxes();
|
||||||
|
// addToggleButtons();
|
||||||
|
currentControls = buttons;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addButtons() {
|
||||||
|
tab.addTab(getString("ButtonDemo.buttons"), buttonPanel);
|
||||||
|
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
|
||||||
|
buttonPanel.setBorder(border5);
|
||||||
|
|
||||||
|
JPanel p1 = createVerticalPanel(true);
|
||||||
|
p1.setAlignmentY(TOP_ALIGNMENT);
|
||||||
|
buttonPanel.add(p1);
|
||||||
|
|
||||||
|
// Text Buttons
|
||||||
|
JPanel p2 = createHorizontalPanel(false);
|
||||||
|
p1.add(p2);
|
||||||
|
p2.setBorder(new CompoundBorder(new TitledBorder(null, getString("ButtonDemo.textbuttons"),
|
||||||
|
TitledBorder.LEFT, TitledBorder.TOP), border5));
|
||||||
|
|
||||||
|
buttons.add(p2.add(new JButton(getString("ButtonDemo.button1"))));
|
||||||
|
p2.add(Box.createRigidArea(HGAP10));
|
||||||
|
|
||||||
|
buttons.add(p2.add(new JButton(getString("ButtonDemo.button2"))));
|
||||||
|
p2.add(Box.createRigidArea(HGAP10));
|
||||||
|
|
||||||
|
buttons.add(p2.add(new JButton(getString("ButtonDemo.button3"))));
|
||||||
|
|
||||||
|
|
||||||
|
// Image Buttons
|
||||||
|
p1.add(Box.createRigidArea(VGAP30));
|
||||||
|
JPanel p3 = createHorizontalPanel(false);
|
||||||
|
p1.add(p3);
|
||||||
|
p3.setLayout(new BoxLayout(p3, BoxLayout.X_AXIS));
|
||||||
|
p3.setBorder(new TitledBorder(null, getString("ButtonDemo.imagebuttons"),
|
||||||
|
TitledBorder.LEFT, TitledBorder.TOP));
|
||||||
|
|
||||||
|
// home image button
|
||||||
|
String description = getString("ButtonDemo.phone");
|
||||||
|
button = new JButton(createImageIcon("buttons/b1.gif", description));
|
||||||
|
button.setPressedIcon(createImageIcon("buttons/b1p.gif", description));
|
||||||
|
button.setRolloverIcon(createImageIcon("buttons/b1r.gif", description));
|
||||||
|
button.setDisabledIcon(createImageIcon("buttons/b1d.gif", description));
|
||||||
|
button.setMargin(new Insets(0,0,0,0));
|
||||||
|
p3.add(button);
|
||||||
|
buttons.add(button);
|
||||||
|
p3.add(Box.createRigidArea(HGAP10));
|
||||||
|
|
||||||
|
// write image button
|
||||||
|
description = getString("ButtonDemo.write");
|
||||||
|
button = new JButton(createImageIcon("buttons/b2.gif", description));
|
||||||
|
button.setPressedIcon(createImageIcon("buttons/b2p.gif", description));
|
||||||
|
button.setRolloverIcon(createImageIcon("buttons/b2r.gif", description));
|
||||||
|
button.setDisabledIcon(createImageIcon("buttons/b2d.gif", description));
|
||||||
|
button.setMargin(new Insets(0,0,0,0));
|
||||||
|
p3.add(button);
|
||||||
|
buttons.add(button);
|
||||||
|
p3.add(Box.createRigidArea(HGAP10));
|
||||||
|
|
||||||
|
// write image button
|
||||||
|
description = getString("ButtonDemo.peace");
|
||||||
|
button = new JButton(createImageIcon("buttons/b3.gif", description));
|
||||||
|
button.setPressedIcon(createImageIcon("buttons/b3p.gif", description));
|
||||||
|
button.setRolloverIcon(createImageIcon("buttons/b3r.gif", description));
|
||||||
|
button.setDisabledIcon(createImageIcon("buttons/b3d.gif", description));
|
||||||
|
button.setMargin(new Insets(0,0,0,0));
|
||||||
|
p3.add(button);
|
||||||
|
buttons.add(button);
|
||||||
|
|
||||||
|
p1.add(Box.createVerticalGlue());
|
||||||
|
|
||||||
|
buttonPanel.add(Box.createHorizontalGlue());
|
||||||
|
currentControls = buttons;
|
||||||
|
buttonPanel.add(createControls());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addRadioButtons() {
|
||||||
|
ButtonGroup group = new ButtonGroup();
|
||||||
|
|
||||||
|
tab.addTab(getString("ButtonDemo.radiobuttons"), radioButtonPanel);
|
||||||
|
radioButtonPanel.setLayout(new BoxLayout(radioButtonPanel, BoxLayout.X_AXIS));
|
||||||
|
radioButtonPanel.setBorder(border5);
|
||||||
|
|
||||||
|
JPanel p1 = createVerticalPanel(true);
|
||||||
|
p1.setAlignmentY(TOP_ALIGNMENT);
|
||||||
|
radioButtonPanel.add(p1);
|
||||||
|
|
||||||
|
// Text Radio Buttons
|
||||||
|
JPanel p2 = createHorizontalPanel(false);
|
||||||
|
p1.add(p2);
|
||||||
|
p2.setBorder(new CompoundBorder(
|
||||||
|
new TitledBorder(
|
||||||
|
null, getString("ButtonDemo.textradiobuttons"),
|
||||||
|
TitledBorder.LEFT, TitledBorder.TOP), border5)
|
||||||
|
);
|
||||||
|
|
||||||
|
radio = (JRadioButton)p2.add(
|
||||||
|
new JRadioButton(getString("ButtonDemo.radio1")));
|
||||||
|
group.add(radio);
|
||||||
|
radiobuttons.add(radio);
|
||||||
|
p2.add(Box.createRigidArea(HGAP10));
|
||||||
|
|
||||||
|
radio = (JRadioButton)p2.add(
|
||||||
|
new JRadioButton(getString("ButtonDemo.radio2")));
|
||||||
|
group.add(radio);
|
||||||
|
radiobuttons.add(radio);
|
||||||
|
p2.add(Box.createRigidArea(HGAP10));
|
||||||
|
|
||||||
|
radio = (JRadioButton)p2.add(
|
||||||
|
new JRadioButton(getString("ButtonDemo.radio3")));
|
||||||
|
group.add(radio);
|
||||||
|
radiobuttons.add(radio);
|
||||||
|
|
||||||
|
// Image Radio Buttons
|
||||||
|
group = new ButtonGroup();
|
||||||
|
p1.add(Box.createRigidArea(VGAP30));
|
||||||
|
JPanel p3 = createHorizontalPanel(false);
|
||||||
|
p1.add(p3);
|
||||||
|
p3.setLayout(new BoxLayout(p3, BoxLayout.X_AXIS));
|
||||||
|
p3.setBorder(new TitledBorder(null, getString("ButtonDemo.imageradiobuttons"),
|
||||||
|
TitledBorder.LEFT, TitledBorder.TOP));
|
||||||
|
|
||||||
|
// image radio button 1
|
||||||
|
String description = getString("ButtonDemo.customradio");
|
||||||
|
String text = getString("ButtonDemo.radio1");
|
||||||
|
radio = new JRadioButton(text, createImageIcon("buttons/rb.gif", description));
|
||||||
|
radio.setPressedIcon(createImageIcon("buttons/rbp.gif", description));
|
||||||
|
radio.setRolloverIcon(createImageIcon("buttons/rbr.gif", description));
|
||||||
|
radio.setRolloverSelectedIcon(createImageIcon("buttons/rbrs.gif", description));
|
||||||
|
radio.setSelectedIcon(createImageIcon("buttons/rbs.gif", description));
|
||||||
|
radio.setMargin(new Insets(0,0,0,0));
|
||||||
|
group.add(radio);
|
||||||
|
p3.add(radio);
|
||||||
|
radiobuttons.add(radio);
|
||||||
|
p3.add(Box.createRigidArea(HGAP20));
|
||||||
|
|
||||||
|
// image radio button 2
|
||||||
|
text = getString("ButtonDemo.radio2");
|
||||||
|
radio = new JRadioButton(text, createImageIcon("buttons/rb.gif", description));
|
||||||
|
radio.setPressedIcon(createImageIcon("buttons/rbp.gif", description));
|
||||||
|
radio.setRolloverIcon(createImageIcon("buttons/rbr.gif", description));
|
||||||
|
radio.setRolloverSelectedIcon(createImageIcon("buttons/rbrs.gif", description));
|
||||||
|
radio.setSelectedIcon(createImageIcon("buttons/rbs.gif", description));
|
||||||
|
radio.setMargin(new Insets(0,0,0,0));
|
||||||
|
group.add(radio);
|
||||||
|
p3.add(radio);
|
||||||
|
radiobuttons.add(radio);
|
||||||
|
p3.add(Box.createRigidArea(HGAP20));
|
||||||
|
|
||||||
|
// image radio button 3
|
||||||
|
text = getString("ButtonDemo.radio3");
|
||||||
|
radio = new JRadioButton(text, createImageIcon("buttons/rb.gif", description));
|
||||||
|
radio.setPressedIcon(createImageIcon("buttons/rbp.gif", description));
|
||||||
|
radio.setRolloverIcon(createImageIcon("buttons/rbr.gif", description));
|
||||||
|
radio.setRolloverSelectedIcon(createImageIcon("buttons/rbrs.gif", description));
|
||||||
|
radio.setSelectedIcon(createImageIcon("buttons/rbs.gif", description));
|
||||||
|
radio.setMargin(new Insets(0,0,0,0));
|
||||||
|
group.add(radio);
|
||||||
|
radiobuttons.add(radio);
|
||||||
|
p3.add(radio);
|
||||||
|
|
||||||
|
// verticaly glue fills out the rest of the box
|
||||||
|
p1.add(Box.createVerticalGlue());
|
||||||
|
|
||||||
|
radioButtonPanel.add(Box.createHorizontalGlue());
|
||||||
|
currentControls = radiobuttons;
|
||||||
|
radioButtonPanel.add(createControls());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void addCheckBoxes() {
|
||||||
|
tab.addTab(getString("ButtonDemo.checkboxes"), checkboxPanel);
|
||||||
|
checkboxPanel.setLayout(new BoxLayout(checkboxPanel, BoxLayout.X_AXIS));
|
||||||
|
checkboxPanel.setBorder(border5);
|
||||||
|
|
||||||
|
JPanel p1 = createVerticalPanel(true);
|
||||||
|
p1.setAlignmentY(TOP_ALIGNMENT);
|
||||||
|
checkboxPanel.add(p1);
|
||||||
|
|
||||||
|
// Text Radio Buttons
|
||||||
|
JPanel p2 = createHorizontalPanel(false);
|
||||||
|
p1.add(p2);
|
||||||
|
p2.setBorder(new CompoundBorder(
|
||||||
|
new TitledBorder(
|
||||||
|
null, getString("ButtonDemo.textcheckboxes"),
|
||||||
|
TitledBorder.LEFT, TitledBorder.TOP), border5)
|
||||||
|
);
|
||||||
|
|
||||||
|
checkboxes.add(p2.add(new JCheckBox(getString("ButtonDemo.check1"))));
|
||||||
|
p2.add(Box.createRigidArea(HGAP10));
|
||||||
|
|
||||||
|
checkboxes.add(p2.add(new JCheckBox(getString("ButtonDemo.check2"))));
|
||||||
|
p2.add(Box.createRigidArea(HGAP10));
|
||||||
|
|
||||||
|
checkboxes.add(p2.add(new JCheckBox(getString("ButtonDemo.check3"))));
|
||||||
|
|
||||||
|
// Image Radio Buttons
|
||||||
|
p1.add(Box.createRigidArea(VGAP30));
|
||||||
|
JPanel p3 = createHorizontalPanel(false);
|
||||||
|
p1.add(p3);
|
||||||
|
p3.setLayout(new BoxLayout(p3, BoxLayout.X_AXIS));
|
||||||
|
p3.setBorder(new TitledBorder(null, getString("ButtonDemo.imagecheckboxes"),
|
||||||
|
TitledBorder.LEFT, TitledBorder.TOP));
|
||||||
|
|
||||||
|
// image checkbox 1
|
||||||
|
String description = getString("ButtonDemo.customcheck");
|
||||||
|
String text = getString("ButtonDemo.check1");
|
||||||
|
check = new JCheckBox(text, createImageIcon("buttons/cb.gif", description));
|
||||||
|
check.setRolloverIcon(createImageIcon("buttons/cbr.gif", description));
|
||||||
|
check.setRolloverSelectedIcon(createImageIcon("buttons/cbrs.gif", description));
|
||||||
|
check.setSelectedIcon(createImageIcon("buttons/cbs.gif", description));
|
||||||
|
check.setMargin(new Insets(0,0,0,0));
|
||||||
|
p3.add(check);
|
||||||
|
checkboxes.add(check);
|
||||||
|
p3.add(Box.createRigidArea(HGAP20));
|
||||||
|
|
||||||
|
// image checkbox 2
|
||||||
|
text = getString("ButtonDemo.check2");
|
||||||
|
check = new JCheckBox(text, createImageIcon("buttons/cb.gif", description));
|
||||||
|
check.setRolloverIcon(createImageIcon("buttons/cbr.gif", description));
|
||||||
|
check.setRolloverSelectedIcon(createImageIcon("buttons/cbrs.gif", description));
|
||||||
|
check.setSelectedIcon(createImageIcon("buttons/cbs.gif", description));
|
||||||
|
check.setMargin(new Insets(0,0,0,0));
|
||||||
|
p3.add(check);
|
||||||
|
checkboxes.add(check);
|
||||||
|
p3.add(Box.createRigidArea(HGAP20));
|
||||||
|
|
||||||
|
// image checkbox 3
|
||||||
|
text = getString("ButtonDemo.check3");
|
||||||
|
check = new JCheckBox(text, createImageIcon("buttons/cb.gif", description));
|
||||||
|
check.setRolloverIcon(createImageIcon("buttons/cbr.gif", description));
|
||||||
|
check.setRolloverSelectedIcon(createImageIcon("buttons/cbrs.gif", description));
|
||||||
|
check.setSelectedIcon(createImageIcon("buttons/cbs.gif", description));
|
||||||
|
check.setMargin(new Insets(0,0,0,0));
|
||||||
|
p3.add(check);
|
||||||
|
checkboxes.add(check);
|
||||||
|
|
||||||
|
// verticaly glue fills out the rest of the box
|
||||||
|
p1.add(Box.createVerticalGlue());
|
||||||
|
|
||||||
|
checkboxPanel.add(Box.createHorizontalGlue());
|
||||||
|
currentControls = checkboxes;
|
||||||
|
checkboxPanel.add(createControls());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addToggleButtons() {
|
||||||
|
tab.addTab(getString("ButtonDemo.togglebuttons"), toggleButtonPanel);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JPanel createControls() {
|
||||||
|
JPanel controls = new JPanel() {
|
||||||
|
public Dimension getMaximumSize() {
|
||||||
|
return new Dimension(300, super.getMaximumSize().height);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
controls.setLayout(new BoxLayout(controls, BoxLayout.Y_AXIS));
|
||||||
|
controls.setAlignmentY(TOP_ALIGNMENT);
|
||||||
|
controls.setAlignmentX(LEFT_ALIGNMENT);
|
||||||
|
|
||||||
|
JPanel buttonControls = createHorizontalPanel(true);
|
||||||
|
buttonControls.setAlignmentY(TOP_ALIGNMENT);
|
||||||
|
buttonControls.setAlignmentX(LEFT_ALIGNMENT);
|
||||||
|
|
||||||
|
JPanel leftColumn = createVerticalPanel(false);
|
||||||
|
leftColumn.setAlignmentX(LEFT_ALIGNMENT);
|
||||||
|
leftColumn.setAlignmentY(TOP_ALIGNMENT);
|
||||||
|
|
||||||
|
JPanel rightColumn = new LayoutControlPanel(this);
|
||||||
|
|
||||||
|
buttonControls.add(leftColumn);
|
||||||
|
buttonControls.add(Box.createRigidArea(HGAP20));
|
||||||
|
buttonControls.add(rightColumn);
|
||||||
|
buttonControls.add(Box.createRigidArea(HGAP20));
|
||||||
|
|
||||||
|
controls.add(buttonControls);
|
||||||
|
|
||||||
|
createListeners();
|
||||||
|
|
||||||
|
// Display Options
|
||||||
|
JLabel l = new JLabel(getString("ButtonDemo.controlpanel_label"));
|
||||||
|
leftColumn.add(l);
|
||||||
|
|
||||||
|
JCheckBox bordered = new JCheckBox(getString("ButtonDemo.paintborder"));
|
||||||
|
bordered.setActionCommand("PaintBorder");
|
||||||
|
bordered.setToolTipText(getString("ButtonDemo.paintborder_tooltip"));
|
||||||
|
bordered.setMnemonic(getMnemonic("ButtonDemo.paintborder_mnemonic"));
|
||||||
|
if (currentControls == buttons) {
|
||||||
|
bordered.setSelected(true);
|
||||||
|
}
|
||||||
|
bordered.addItemListener(buttonDisplayListener);
|
||||||
|
leftColumn.add(bordered);
|
||||||
|
|
||||||
|
JCheckBox focused = new JCheckBox(getString("ButtonDemo.paintfocus"));
|
||||||
|
focused.setActionCommand("PaintFocus");
|
||||||
|
focused.setToolTipText(getString("ButtonDemo.paintfocus_tooltip"));
|
||||||
|
focused.setMnemonic(getMnemonic("ButtonDemo.paintfocus_mnemonic"));
|
||||||
|
focused.setSelected(true);
|
||||||
|
focused.addItemListener(buttonDisplayListener);
|
||||||
|
leftColumn.add(focused);
|
||||||
|
|
||||||
|
JCheckBox enabled = new JCheckBox(getString("ButtonDemo.enabled"));
|
||||||
|
enabled.setActionCommand("Enabled");
|
||||||
|
enabled.setToolTipText(getString("ButtonDemo.enabled_tooltip"));
|
||||||
|
enabled.setSelected(true);
|
||||||
|
enabled.addItemListener(buttonDisplayListener);
|
||||||
|
enabled.setMnemonic(getMnemonic("ButtonDemo.enabled_mnemonic"));
|
||||||
|
leftColumn.add(enabled);
|
||||||
|
|
||||||
|
JCheckBox filled = new JCheckBox(getString("ButtonDemo.contentfilled"));
|
||||||
|
filled.setActionCommand("ContentFilled");
|
||||||
|
filled.setToolTipText(getString("ButtonDemo.contentfilled_tooltip"));
|
||||||
|
filled.setSelected(true);
|
||||||
|
filled.addItemListener(buttonDisplayListener);
|
||||||
|
filled.setMnemonic(getMnemonic("ButtonDemo.contentfilled_mnemonic"));
|
||||||
|
leftColumn.add(filled);
|
||||||
|
|
||||||
|
leftColumn.add(Box.createRigidArea(VGAP20));
|
||||||
|
|
||||||
|
l = new JLabel(getString("ButtonDemo.padamount_label"));
|
||||||
|
leftColumn.add(l);
|
||||||
|
ButtonGroup group = new ButtonGroup();
|
||||||
|
JRadioButton defaultPad = new JRadioButton(getString("ButtonDemo.default"));
|
||||||
|
defaultPad.setToolTipText(getString("ButtonDemo.default_tooltip"));
|
||||||
|
defaultPad.setMnemonic(getMnemonic("ButtonDemo.default_mnemonic"));
|
||||||
|
defaultPad.addItemListener(buttonPadListener);
|
||||||
|
group.add(defaultPad);
|
||||||
|
defaultPad.setSelected(true);
|
||||||
|
leftColumn.add(defaultPad);
|
||||||
|
|
||||||
|
JRadioButton zeroPad = new JRadioButton(getString("ButtonDemo.zero"));
|
||||||
|
zeroPad.setActionCommand("ZeroPad");
|
||||||
|
zeroPad.setToolTipText(getString("ButtonDemo.zero_tooltip"));
|
||||||
|
zeroPad.addItemListener(buttonPadListener);
|
||||||
|
zeroPad.setMnemonic(getMnemonic("ButtonDemo.zero_mnemonic"));
|
||||||
|
group.add(zeroPad);
|
||||||
|
leftColumn.add(zeroPad);
|
||||||
|
|
||||||
|
JRadioButton tenPad = new JRadioButton(getString("ButtonDemo.ten"));
|
||||||
|
tenPad.setActionCommand("TenPad");
|
||||||
|
tenPad.setMnemonic(getMnemonic("ButtonDemo.ten_mnemonic"));
|
||||||
|
tenPad.setToolTipText(getString("ButtonDemo.ten_tooltip"));
|
||||||
|
tenPad.addItemListener(buttonPadListener);
|
||||||
|
group.add(tenPad);
|
||||||
|
leftColumn.add(tenPad);
|
||||||
|
|
||||||
|
leftColumn.add(Box.createRigidArea(VGAP20));
|
||||||
|
return controls;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createListeners() {
|
||||||
|
buttonDisplayListener = new ItemListener() {
|
||||||
|
Component c;
|
||||||
|
AbstractButton b;
|
||||||
|
|
||||||
|
public void itemStateChanged(ItemEvent e) {
|
||||||
|
JCheckBox cb = (JCheckBox) e.getSource();
|
||||||
|
String command = cb.getActionCommand();
|
||||||
|
if(command == "Enabled") {
|
||||||
|
for(int i = 0; i < currentControls.size(); i++) {
|
||||||
|
c = (Component) currentControls.elementAt(i);
|
||||||
|
c.setEnabled(cb.isSelected());
|
||||||
|
c.invalidate();
|
||||||
|
}
|
||||||
|
} else if(command == "PaintBorder") {
|
||||||
|
c = (Component) currentControls.elementAt(0);
|
||||||
|
if(c instanceof AbstractButton) {
|
||||||
|
for(int i = 0; i < currentControls.size(); i++) {
|
||||||
|
b = (AbstractButton) currentControls.elementAt(i);
|
||||||
|
b.setBorderPainted(cb.isSelected());
|
||||||
|
b.invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if(command == "PaintFocus") {
|
||||||
|
c = (Component) currentControls.elementAt(0);
|
||||||
|
if(c instanceof AbstractButton) {
|
||||||
|
for(int i = 0; i < currentControls.size(); i++) {
|
||||||
|
b = (AbstractButton) currentControls.elementAt(i);
|
||||||
|
b.setFocusPainted(cb.isSelected());
|
||||||
|
b.invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if(command == "ContentFilled") {
|
||||||
|
c = (Component) currentControls.elementAt(0);
|
||||||
|
if(c instanceof AbstractButton) {
|
||||||
|
for(int i = 0; i < currentControls.size(); i++) {
|
||||||
|
b = (AbstractButton) currentControls.elementAt(i);
|
||||||
|
b.setContentAreaFilled(cb.isSelected());
|
||||||
|
b.invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
invalidate();
|
||||||
|
validate();
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
buttonPadListener = new ItemListener() {
|
||||||
|
Component c;
|
||||||
|
AbstractButton b;
|
||||||
|
|
||||||
|
public void itemStateChanged(ItemEvent e) {
|
||||||
|
// *** pad = 0
|
||||||
|
int pad = -1;
|
||||||
|
JRadioButton rb = (JRadioButton) e.getSource();
|
||||||
|
String command = rb.getActionCommand();
|
||||||
|
if(command == "ZeroPad" && rb.isSelected()) {
|
||||||
|
pad = 0;
|
||||||
|
} else if(command == "TenPad" && rb.isSelected()) {
|
||||||
|
pad = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < currentControls.size(); i++) {
|
||||||
|
b = (AbstractButton) currentControls.elementAt(i);
|
||||||
|
if(pad == -1) {
|
||||||
|
b.setMargin(null);
|
||||||
|
} else if(pad == 0) {
|
||||||
|
b.setMargin(insets0);
|
||||||
|
} else {
|
||||||
|
b.setMargin(insets10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
invalidate();
|
||||||
|
validate();
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stateChanged(ChangeEvent e) {
|
||||||
|
SingleSelectionModel model = (SingleSelectionModel) e.getSource();
|
||||||
|
if(model.getSelectedIndex() == 0) {
|
||||||
|
currentControls = buttons;
|
||||||
|
} else if(model.getSelectedIndex() == 1) {
|
||||||
|
currentControls = radiobuttons;
|
||||||
|
} else if(model.getSelectedIndex() == 2) {
|
||||||
|
currentControls = checkboxes;
|
||||||
|
} else {
|
||||||
|
currentControls = togglebuttons;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector getCurrentControls() {
|
||||||
|
return currentControls;
|
||||||
|
}
|
||||||
|
}
|
71
src/demo/share/jfc/SwingSet2/CharcoalTheme.java
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.plaf.*;
|
||||||
|
import javax.swing.plaf.metal.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class describes a theme using gray colors.
|
||||||
|
*
|
||||||
|
* @author Steve Wilson
|
||||||
|
*/
|
||||||
|
public class CharcoalTheme extends DefaultMetalTheme {
|
||||||
|
|
||||||
|
public String getName() { return "Charcoal"; }
|
||||||
|
|
||||||
|
private final ColorUIResource primary1 = new ColorUIResource(66, 33, 66);
|
||||||
|
private final ColorUIResource primary2 = new ColorUIResource(90, 86, 99);
|
||||||
|
private final ColorUIResource primary3 = new ColorUIResource(99, 99, 99);
|
||||||
|
|
||||||
|
private final ColorUIResource secondary1 = new ColorUIResource(0, 0, 0);
|
||||||
|
private final ColorUIResource secondary2 = new ColorUIResource(51, 51, 51);
|
||||||
|
private final ColorUIResource secondary3 = new ColorUIResource(102, 102, 102);
|
||||||
|
|
||||||
|
private final ColorUIResource black = new ColorUIResource(222, 222, 222);
|
||||||
|
private final ColorUIResource white = new ColorUIResource(0, 0, 0);
|
||||||
|
|
||||||
|
protected ColorUIResource getPrimary1() { return primary1; }
|
||||||
|
protected ColorUIResource getPrimary2() { return primary2; }
|
||||||
|
protected ColorUIResource getPrimary3() { return primary3; }
|
||||||
|
|
||||||
|
protected ColorUIResource getSecondary1() { return secondary1; }
|
||||||
|
protected ColorUIResource getSecondary2() { return secondary2; }
|
||||||
|
protected ColorUIResource getSecondary3() { return secondary3; }
|
||||||
|
|
||||||
|
protected ColorUIResource getBlack() { return black; }
|
||||||
|
protected ColorUIResource getWhite() { return white; }
|
||||||
|
|
||||||
|
}
|
209
src/demo/share/jfc/SwingSet2/ColorChooserDemo.java
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JColorChooserDemo
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class ColorChooserDemo extends DemoModule {
|
||||||
|
|
||||||
|
BezierAnimationPanel bezAnim;
|
||||||
|
JButton outerColorButton = null;
|
||||||
|
JButton backgroundColorButton = null;
|
||||||
|
JButton gradientAButton = null;
|
||||||
|
JButton gradientBButton = null;
|
||||||
|
|
||||||
|
// to store the color chosen from the JColorChooser
|
||||||
|
private Color chosen;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ColorChooserDemo demo = new ColorChooserDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ColorChooserDemo Constructor
|
||||||
|
*/
|
||||||
|
public ColorChooserDemo(SwingSet2 swingset) {
|
||||||
|
// Set the title for this demo, and an icon used to represent this
|
||||||
|
// demo inside the SwingSet2 app.
|
||||||
|
super(swingset, "ColorChooserDemo", "toolbar/JColorChooser.gif");
|
||||||
|
|
||||||
|
// Create the bezier animation panel to put in the center of the panel.
|
||||||
|
bezAnim = new BezierAnimationPanel();
|
||||||
|
|
||||||
|
outerColorButton = new JButton(getString("ColorChooserDemo.outer_line"));
|
||||||
|
outerColorButton.setIcon(new ColorSwatch("OuterLine", bezAnim));
|
||||||
|
|
||||||
|
backgroundColorButton = new JButton(getString("ColorChooserDemo.background"));
|
||||||
|
backgroundColorButton.setIcon(new ColorSwatch("Background", bezAnim));
|
||||||
|
|
||||||
|
gradientAButton = new JButton(getString("ColorChooserDemo.grad_a"));
|
||||||
|
gradientAButton.setIcon(new ColorSwatch("GradientA", bezAnim));
|
||||||
|
|
||||||
|
gradientBButton = new JButton(getString("ColorChooserDemo.grad_b"));
|
||||||
|
gradientBButton.setIcon(new ColorSwatch("GradientB", bezAnim));
|
||||||
|
|
||||||
|
ActionListener l = new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
Color current = bezAnim.getOuterColor();
|
||||||
|
|
||||||
|
if(e.getSource() == backgroundColorButton) {
|
||||||
|
current = bezAnim.getBackgroundColor();
|
||||||
|
} else if(e.getSource() == gradientAButton) {
|
||||||
|
current = bezAnim.getGradientColorA();
|
||||||
|
} else if(e.getSource() == gradientBButton) {
|
||||||
|
current = bezAnim.getGradientColorB();
|
||||||
|
}
|
||||||
|
|
||||||
|
final JColorChooser chooser = new JColorChooser(current != null ?
|
||||||
|
current :
|
||||||
|
Color.WHITE);
|
||||||
|
if (getSwingSet2() != null && getSwingSet2().isDragEnabled()) {
|
||||||
|
chooser.setDragEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
chosen = null;
|
||||||
|
ActionListener okListener = new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent ae) {
|
||||||
|
chosen = chooser.getColor();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
JDialog dialog = JColorChooser.createDialog(getDemoPanel(),
|
||||||
|
getString("ColorChooserDemo.chooser_title"),
|
||||||
|
true,
|
||||||
|
chooser,
|
||||||
|
okListener,
|
||||||
|
null);
|
||||||
|
|
||||||
|
dialog.show();
|
||||||
|
|
||||||
|
if(e.getSource() == outerColorButton) {
|
||||||
|
bezAnim.setOuterColor(chosen);
|
||||||
|
} else if(e.getSource() == backgroundColorButton) {
|
||||||
|
bezAnim.setBackgroundColor(chosen);
|
||||||
|
} else if(e.getSource() == gradientAButton) {
|
||||||
|
bezAnim.setGradientColorA(chosen);
|
||||||
|
} else {
|
||||||
|
bezAnim.setGradientColorB(chosen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
outerColorButton.addActionListener(l);
|
||||||
|
backgroundColorButton.addActionListener(l);
|
||||||
|
gradientAButton.addActionListener(l);
|
||||||
|
gradientBButton.addActionListener(l);
|
||||||
|
|
||||||
|
// Add everything to the panel
|
||||||
|
JPanel p = getDemoPanel();
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
|
||||||
|
|
||||||
|
// Add control buttons
|
||||||
|
JPanel buttonPanel = new JPanel();
|
||||||
|
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
|
||||||
|
|
||||||
|
buttonPanel.add(backgroundColorButton);
|
||||||
|
buttonPanel.add(Box.createRigidArea(new Dimension(15, 1)));
|
||||||
|
|
||||||
|
buttonPanel.add(gradientAButton);
|
||||||
|
buttonPanel.add(Box.createRigidArea(new Dimension(15, 1)));
|
||||||
|
|
||||||
|
buttonPanel.add(gradientBButton);
|
||||||
|
buttonPanel.add(Box.createRigidArea(new Dimension(15, 1)));
|
||||||
|
|
||||||
|
buttonPanel.add(outerColorButton);
|
||||||
|
|
||||||
|
// Add the panel midway down the panel
|
||||||
|
p.add(Box.createRigidArea(new Dimension(1, 10)));
|
||||||
|
p.add(buttonPanel);
|
||||||
|
p.add(Box.createRigidArea(new Dimension(1, 5)));
|
||||||
|
p.add(bezAnim);
|
||||||
|
}
|
||||||
|
|
||||||
|
class ColorSwatch implements Icon {
|
||||||
|
String gradient;
|
||||||
|
BezierAnimationPanel bez;
|
||||||
|
|
||||||
|
public ColorSwatch(String g, BezierAnimationPanel b) {
|
||||||
|
bez = b;
|
||||||
|
gradient = g;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIconWidth() {
|
||||||
|
return 11;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIconHeight() {
|
||||||
|
return 11;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paintIcon(Component c, Graphics g, int x, int y) {
|
||||||
|
g.setColor(Color.black);
|
||||||
|
g.fillRect(x, y, getIconWidth(), getIconHeight());
|
||||||
|
if(gradient.equals("GradientA")) {
|
||||||
|
g.setColor(bez.getGradientColorA());
|
||||||
|
} else if(gradient.equals("GradientB")) {
|
||||||
|
g.setColor(bez.getGradientColorB());
|
||||||
|
} else if(gradient.equals("Background")) {
|
||||||
|
g.setColor(bez.getBackgroundColor());
|
||||||
|
} else if(gradient.equals("OuterLine")) {
|
||||||
|
g.setColor(bez.getOuterColor());
|
||||||
|
}
|
||||||
|
g.fillRect(x+2, y+2, getIconWidth()-4, getIconHeight()-4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
400
src/demo/share/jfc/SwingSet2/ComboBoxDemo.java
Normal file
@ -0,0 +1,400 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JComboBox Demo
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class ComboBoxDemo extends DemoModule implements ActionListener {
|
||||||
|
|
||||||
|
Face face;
|
||||||
|
JLabel faceLabel;
|
||||||
|
|
||||||
|
JComboBox hairCB;
|
||||||
|
JComboBox eyesCB;
|
||||||
|
JComboBox mouthCB;
|
||||||
|
|
||||||
|
JComboBox presetCB;
|
||||||
|
|
||||||
|
Hashtable parts = new Hashtable();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ComboBoxDemo demo = new ComboBoxDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ComboBoxDemo Constructor
|
||||||
|
*/
|
||||||
|
public ComboBoxDemo(SwingSet2 swingset) {
|
||||||
|
// Set the title for this demo, and an icon used to represent this
|
||||||
|
// demo inside the SwingSet2 app.
|
||||||
|
super(swingset, "ComboBoxDemo", "toolbar/JComboBox.gif");
|
||||||
|
|
||||||
|
createComboBoxDemo();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createComboBoxDemo() {
|
||||||
|
JPanel demo = getDemoPanel();
|
||||||
|
|
||||||
|
JPanel demoPanel = getDemoPanel();
|
||||||
|
demoPanel.setLayout(new BoxLayout(demoPanel, BoxLayout.Y_AXIS));
|
||||||
|
|
||||||
|
JPanel innerPanel = new JPanel();
|
||||||
|
innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.X_AXIS));
|
||||||
|
|
||||||
|
demoPanel.add(Box.createRigidArea(VGAP20));
|
||||||
|
demoPanel.add(innerPanel);
|
||||||
|
demoPanel.add(Box.createRigidArea(VGAP20));
|
||||||
|
|
||||||
|
innerPanel.add(Box.createRigidArea(HGAP20));
|
||||||
|
|
||||||
|
// Create a panel to hold buttons
|
||||||
|
JPanel comboBoxPanel = new JPanel() {
|
||||||
|
public Dimension getMaximumSize() {
|
||||||
|
return new Dimension(getPreferredSize().width, super.getMaximumSize().height);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
comboBoxPanel.setLayout(new BoxLayout(comboBoxPanel, BoxLayout.Y_AXIS));
|
||||||
|
|
||||||
|
comboBoxPanel.add(Box.createRigidArea(VGAP15));
|
||||||
|
|
||||||
|
JLabel l = (JLabel) comboBoxPanel.add(new JLabel(getString("ComboBoxDemo.presets")));
|
||||||
|
l.setAlignmentX(JLabel.LEFT_ALIGNMENT);
|
||||||
|
presetCB = (JComboBox) comboBoxPanel.add(createPresetComboBox());
|
||||||
|
presetCB.setAlignmentX(JComboBox.LEFT_ALIGNMENT);
|
||||||
|
l.setLabelFor(presetCB);
|
||||||
|
comboBoxPanel.add(Box.createRigidArea(VGAP30));
|
||||||
|
|
||||||
|
l = (JLabel) comboBoxPanel.add(new JLabel(getString("ComboBoxDemo.hair_description")));
|
||||||
|
l.setAlignmentX(JLabel.LEFT_ALIGNMENT);
|
||||||
|
hairCB = (JComboBox) comboBoxPanel.add(createHairComboBox());
|
||||||
|
hairCB.setAlignmentX(JComboBox.LEFT_ALIGNMENT);
|
||||||
|
l.setLabelFor(hairCB);
|
||||||
|
comboBoxPanel.add(Box.createRigidArea(VGAP15));
|
||||||
|
|
||||||
|
l = (JLabel) comboBoxPanel.add(new JLabel(getString("ComboBoxDemo.eyes_description")));
|
||||||
|
l.setAlignmentX(JLabel.LEFT_ALIGNMENT);
|
||||||
|
eyesCB = (JComboBox) comboBoxPanel.add(createEyesComboBox());
|
||||||
|
eyesCB.setAlignmentX(JComboBox.LEFT_ALIGNMENT);
|
||||||
|
l.setLabelFor(eyesCB);
|
||||||
|
comboBoxPanel.add(Box.createRigidArea(VGAP15));
|
||||||
|
|
||||||
|
l = (JLabel) comboBoxPanel.add(new JLabel(getString("ComboBoxDemo.mouth_description")));
|
||||||
|
l.setAlignmentX(JLabel.LEFT_ALIGNMENT);
|
||||||
|
mouthCB = (JComboBox) comboBoxPanel.add(createMouthComboBox());
|
||||||
|
mouthCB.setAlignmentX(JComboBox.LEFT_ALIGNMENT);
|
||||||
|
l.setLabelFor(mouthCB);
|
||||||
|
comboBoxPanel.add(Box.createRigidArea(VGAP15));
|
||||||
|
|
||||||
|
// Fill up the remaining space
|
||||||
|
comboBoxPanel.add(new JPanel(new BorderLayout()));
|
||||||
|
|
||||||
|
// Create and place the Face.
|
||||||
|
|
||||||
|
face = new Face();
|
||||||
|
JPanel facePanel = new JPanel();
|
||||||
|
facePanel.setLayout(new BorderLayout());
|
||||||
|
facePanel.setBorder(new BevelBorder(BevelBorder.LOWERED));
|
||||||
|
|
||||||
|
faceLabel = new JLabel(face);
|
||||||
|
facePanel.add(faceLabel, BorderLayout.CENTER);
|
||||||
|
// Indicate that the face panel is controlled by the hair, eyes and
|
||||||
|
// mouth combo boxes.
|
||||||
|
Object [] controlledByObjects = new Object[3];
|
||||||
|
controlledByObjects[0] = hairCB;
|
||||||
|
controlledByObjects[1] = eyesCB;
|
||||||
|
controlledByObjects[2] = mouthCB;
|
||||||
|
AccessibleRelation controlledByRelation =
|
||||||
|
new AccessibleRelation(AccessibleRelation.CONTROLLED_BY_PROPERTY,
|
||||||
|
controlledByObjects);
|
||||||
|
facePanel.getAccessibleContext().getAccessibleRelationSet().add(controlledByRelation);
|
||||||
|
|
||||||
|
// Indicate that the hair, eyes and mouth combo boxes are controllers
|
||||||
|
// for the face panel.
|
||||||
|
AccessibleRelation controllerForRelation =
|
||||||
|
new AccessibleRelation(AccessibleRelation.CONTROLLER_FOR_PROPERTY,
|
||||||
|
facePanel);
|
||||||
|
hairCB.getAccessibleContext().getAccessibleRelationSet().add(controllerForRelation);
|
||||||
|
eyesCB.getAccessibleContext().getAccessibleRelationSet().add(controllerForRelation);
|
||||||
|
mouthCB.getAccessibleContext().getAccessibleRelationSet().add(controllerForRelation);
|
||||||
|
|
||||||
|
// add buttons and image panels to inner panel
|
||||||
|
innerPanel.add(comboBoxPanel);
|
||||||
|
innerPanel.add(Box.createRigidArea(HGAP30));
|
||||||
|
innerPanel.add(facePanel);
|
||||||
|
innerPanel.add(Box.createRigidArea(HGAP20));
|
||||||
|
|
||||||
|
// load up the face parts
|
||||||
|
addFace("brent", getString("ComboBoxDemo.brent"));
|
||||||
|
addFace("georges", getString("ComboBoxDemo.georges"));
|
||||||
|
addFace("hans", getString("ComboBoxDemo.hans"));
|
||||||
|
addFace("howard", getString("ComboBoxDemo.howard"));
|
||||||
|
addFace("james", getString("ComboBoxDemo.james"));
|
||||||
|
addFace("jeff", getString("ComboBoxDemo.jeff"));
|
||||||
|
addFace("jon", getString("ComboBoxDemo.jon"));
|
||||||
|
addFace("lara", getString("ComboBoxDemo.lara"));
|
||||||
|
addFace("larry", getString("ComboBoxDemo.larry"));
|
||||||
|
addFace("lisa", getString("ComboBoxDemo.lisa"));
|
||||||
|
addFace("michael", getString("ComboBoxDemo.michael"));
|
||||||
|
addFace("philip", getString("ComboBoxDemo.philip"));
|
||||||
|
addFace("scott", getString("ComboBoxDemo.scott"));
|
||||||
|
|
||||||
|
// set the default face
|
||||||
|
presetCB.setSelectedIndex(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void addFace(String name, String i18n_name) {
|
||||||
|
ImageIcon i;
|
||||||
|
String i18n_hair = getString("ComboBoxDemo.hair");
|
||||||
|
String i18n_eyes = getString("ComboBoxDemo.eyes");
|
||||||
|
String i18n_mouth = getString("ComboBoxDemo.mouth");
|
||||||
|
|
||||||
|
parts.put(i18n_name, name); // i18n name lookup
|
||||||
|
parts.put(name, i18n_name); // reverse name lookup
|
||||||
|
|
||||||
|
i = createImageIcon("combobox/" + name + "hair.jpg", i18n_name + i18n_hair);
|
||||||
|
parts.put(name + "hair", i);
|
||||||
|
|
||||||
|
i = createImageIcon("combobox/" + name + "eyes.jpg", i18n_name + i18n_eyes);
|
||||||
|
parts.put(name + "eyes", i);
|
||||||
|
|
||||||
|
i = createImageIcon("combobox/" + name + "mouth.jpg", i18n_name + i18n_mouth);
|
||||||
|
parts.put(name + "mouth", i);
|
||||||
|
}
|
||||||
|
|
||||||
|
Face getFace() {
|
||||||
|
return face;
|
||||||
|
}
|
||||||
|
|
||||||
|
JComboBox createHairComboBox() {
|
||||||
|
JComboBox cb = new JComboBox();
|
||||||
|
fillComboBox(cb);
|
||||||
|
cb.addActionListener(this);
|
||||||
|
return cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
JComboBox createEyesComboBox() {
|
||||||
|
JComboBox cb = new JComboBox();
|
||||||
|
fillComboBox(cb);
|
||||||
|
cb.addActionListener(this);
|
||||||
|
return cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
JComboBox createNoseComboBox() {
|
||||||
|
JComboBox cb = new JComboBox();
|
||||||
|
fillComboBox(cb);
|
||||||
|
cb.addActionListener(this);
|
||||||
|
return cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
JComboBox createMouthComboBox() {
|
||||||
|
JComboBox cb = new JComboBox();
|
||||||
|
fillComboBox(cb);
|
||||||
|
cb.addActionListener(this);
|
||||||
|
return cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
JComboBox createPresetComboBox() {
|
||||||
|
JComboBox cb = new JComboBox();
|
||||||
|
cb.addItem(getString("ComboBoxDemo.preset1"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.preset2"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.preset3"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.preset4"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.preset5"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.preset6"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.preset7"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.preset8"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.preset9"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.preset10"));
|
||||||
|
cb.addActionListener(this);
|
||||||
|
return cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fillComboBox(JComboBox cb) {
|
||||||
|
cb.addItem(getString("ComboBoxDemo.brent"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.georges"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.hans"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.howard"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.james"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.jeff"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.jon"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.lara"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.larry"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.lisa"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.michael"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.philip"));
|
||||||
|
cb.addItem(getString("ComboBoxDemo.scott"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if(e.getSource() == hairCB) {
|
||||||
|
String name = (String) parts.get((String) hairCB.getSelectedItem());
|
||||||
|
face.setHair((ImageIcon) parts.get(name + "hair"));
|
||||||
|
faceLabel.repaint();
|
||||||
|
} else if(e.getSource() == eyesCB) {
|
||||||
|
String name = (String) parts.get((String) eyesCB.getSelectedItem());
|
||||||
|
face.setEyes((ImageIcon) parts.get(name + "eyes"));
|
||||||
|
faceLabel.repaint();
|
||||||
|
} else if(e.getSource() == mouthCB) {
|
||||||
|
String name = (String) parts.get((String) mouthCB.getSelectedItem());
|
||||||
|
face.setMouth((ImageIcon) parts.get(name + "mouth"));
|
||||||
|
faceLabel.repaint();
|
||||||
|
} else if(e.getSource() == presetCB) {
|
||||||
|
String hair = null;
|
||||||
|
String eyes = null;
|
||||||
|
String mouth = null;
|
||||||
|
switch(presetCB.getSelectedIndex()) {
|
||||||
|
case 0:
|
||||||
|
hair = (String) parts.get("philip");
|
||||||
|
eyes = (String) parts.get("howard");
|
||||||
|
mouth = (String) parts.get("jeff");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
hair = (String) parts.get("jeff");
|
||||||
|
eyes = (String) parts.get("larry");
|
||||||
|
mouth = (String) parts.get("philip");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
hair = (String) parts.get("howard");
|
||||||
|
eyes = (String) parts.get("scott");
|
||||||
|
mouth = (String) parts.get("hans");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
hair = (String) parts.get("philip");
|
||||||
|
eyes = (String) parts.get("jeff");
|
||||||
|
mouth = (String) parts.get("hans");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
hair = (String) parts.get("brent");
|
||||||
|
eyes = (String) parts.get("jon");
|
||||||
|
mouth = (String) parts.get("scott");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
hair = (String) parts.get("lara");
|
||||||
|
eyes = (String) parts.get("larry");
|
||||||
|
mouth = (String) parts.get("lisa");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
hair = (String) parts.get("james");
|
||||||
|
eyes = (String) parts.get("philip");
|
||||||
|
mouth = (String) parts.get("michael");
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
hair = (String) parts.get("philip");
|
||||||
|
eyes = (String) parts.get("lisa");
|
||||||
|
mouth = (String) parts.get("brent");
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
hair = (String) parts.get("james");
|
||||||
|
eyes = (String) parts.get("philip");
|
||||||
|
mouth = (String) parts.get("jon");
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
hair = (String) parts.get("lara");
|
||||||
|
eyes = (String) parts.get("jon");
|
||||||
|
mouth = (String) parts.get("scott");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(hair != null) {
|
||||||
|
hairCB.setSelectedItem(hair);
|
||||||
|
eyesCB.setSelectedItem(eyes);
|
||||||
|
mouthCB.setSelectedItem(mouth);
|
||||||
|
faceLabel.repaint();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Face implements Icon {
|
||||||
|
ImageIcon hair;
|
||||||
|
ImageIcon eyes;
|
||||||
|
ImageIcon mouth;
|
||||||
|
|
||||||
|
void setHair(ImageIcon i) {
|
||||||
|
hair = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setEyes(ImageIcon i) {
|
||||||
|
eyes = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setMouth(ImageIcon i) {
|
||||||
|
mouth = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paintIcon(Component c, Graphics g, int x, int y) {
|
||||||
|
int height = y;
|
||||||
|
x = c.getWidth()/2 - getIconWidth()/2;
|
||||||
|
|
||||||
|
if(hair != null) {
|
||||||
|
hair.paintIcon(c, g, x, height); height += hair.getIconHeight();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(eyes != null) {
|
||||||
|
eyes.paintIcon(c, g, x, height); height += eyes.getIconHeight();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mouth != null) {
|
||||||
|
mouth.paintIcon(c, g, x, height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIconWidth() {
|
||||||
|
return 344;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIconHeight() {
|
||||||
|
return 455;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
100
src/demo/share/jfc/SwingSet2/ContrastTheme.java
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.plaf.*;
|
||||||
|
import javax.swing.plaf.basic.*;
|
||||||
|
import javax.swing.plaf.metal.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class describes a higher-contrast Metal Theme.
|
||||||
|
*
|
||||||
|
* @author Michael C. Albers
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ContrastTheme extends DefaultMetalTheme {
|
||||||
|
|
||||||
|
public String getName() { return "Contrast"; }
|
||||||
|
|
||||||
|
private final ColorUIResource primary1 = new ColorUIResource(0, 0, 0);
|
||||||
|
private final ColorUIResource primary2 = new ColorUIResource(204, 204, 204);
|
||||||
|
private final ColorUIResource primary3 = new ColorUIResource(255, 255, 255);
|
||||||
|
private final ColorUIResource primaryHighlight = new ColorUIResource(102,102,102);
|
||||||
|
|
||||||
|
private final ColorUIResource secondary2 = new ColorUIResource(204, 204, 204);
|
||||||
|
private final ColorUIResource secondary3 = new ColorUIResource(255, 255, 255);
|
||||||
|
private final ColorUIResource controlHighlight = new ColorUIResource(102,102,102);
|
||||||
|
|
||||||
|
protected ColorUIResource getPrimary1() { return primary1; }
|
||||||
|
protected ColorUIResource getPrimary2() { return primary2; }
|
||||||
|
protected ColorUIResource getPrimary3() { return primary3; }
|
||||||
|
public ColorUIResource getPrimaryControlHighlight() { return primaryHighlight;}
|
||||||
|
|
||||||
|
protected ColorUIResource getSecondary2() { return secondary2; }
|
||||||
|
protected ColorUIResource getSecondary3() { return secondary3; }
|
||||||
|
public ColorUIResource getControlHighlight() { return super.getSecondary3(); }
|
||||||
|
|
||||||
|
public ColorUIResource getFocusColor() { return getBlack(); }
|
||||||
|
|
||||||
|
public ColorUIResource getTextHighlightColor() { return getBlack(); }
|
||||||
|
public ColorUIResource getHighlightedTextColor() { return getWhite(); }
|
||||||
|
|
||||||
|
public ColorUIResource getMenuSelectedBackground() { return getBlack(); }
|
||||||
|
public ColorUIResource getMenuSelectedForeground() { return getWhite(); }
|
||||||
|
public ColorUIResource getAcceleratorForeground() { return getBlack(); }
|
||||||
|
public ColorUIResource getAcceleratorSelectedForeground() { return getWhite(); }
|
||||||
|
|
||||||
|
|
||||||
|
public void addCustomEntriesToTable(UIDefaults table) {
|
||||||
|
|
||||||
|
Border blackLineBorder = new BorderUIResource(new LineBorder( getBlack() ));
|
||||||
|
|
||||||
|
Object textBorder = new BorderUIResource( new CompoundBorder(
|
||||||
|
blackLineBorder,
|
||||||
|
new BasicBorders.MarginBorder()));
|
||||||
|
|
||||||
|
table.put( "ToolTip.border", blackLineBorder);
|
||||||
|
table.put( "TitledBorder.border", blackLineBorder);
|
||||||
|
|
||||||
|
table.put( "TextField.border", textBorder);
|
||||||
|
table.put( "PasswordField.border", textBorder);
|
||||||
|
table.put( "TextArea.border", textBorder);
|
||||||
|
table.put( "TextPane.border", textBorder);
|
||||||
|
table.put( "EditorPane.border", textBorder);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
229
src/demo/share/jfc/SwingSet2/DemoModule.java
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A generic SwingSet2 demo module
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class DemoModule extends JApplet {
|
||||||
|
|
||||||
|
// The preferred size of the demo
|
||||||
|
private int PREFERRED_WIDTH = 680;
|
||||||
|
private int PREFERRED_HEIGHT = 600;
|
||||||
|
|
||||||
|
Border loweredBorder = new CompoundBorder(new SoftBevelBorder(SoftBevelBorder.LOWERED),
|
||||||
|
new EmptyBorder(5,5,5,5));
|
||||||
|
|
||||||
|
// Premade convenience dimensions, for use wherever you need 'em.
|
||||||
|
public static Dimension HGAP2 = new Dimension(2,1);
|
||||||
|
public static Dimension VGAP2 = new Dimension(1,2);
|
||||||
|
|
||||||
|
public static Dimension HGAP5 = new Dimension(5,1);
|
||||||
|
public static Dimension VGAP5 = new Dimension(1,5);
|
||||||
|
|
||||||
|
public static Dimension HGAP10 = new Dimension(10,1);
|
||||||
|
public static Dimension VGAP10 = new Dimension(1,10);
|
||||||
|
|
||||||
|
public static Dimension HGAP15 = new Dimension(15,1);
|
||||||
|
public static Dimension VGAP15 = new Dimension(1,15);
|
||||||
|
|
||||||
|
public static Dimension HGAP20 = new Dimension(20,1);
|
||||||
|
public static Dimension VGAP20 = new Dimension(1,20);
|
||||||
|
|
||||||
|
public static Dimension HGAP25 = new Dimension(25,1);
|
||||||
|
public static Dimension VGAP25 = new Dimension(1,25);
|
||||||
|
|
||||||
|
public static Dimension HGAP30 = new Dimension(30,1);
|
||||||
|
public static Dimension VGAP30 = new Dimension(1,30);
|
||||||
|
|
||||||
|
private SwingSet2 swingset = null;
|
||||||
|
private JPanel panel = null;
|
||||||
|
private String resourceName = null;
|
||||||
|
private String iconPath = null;
|
||||||
|
private String sourceCode = null;
|
||||||
|
|
||||||
|
public DemoModule(SwingSet2 swingset) {
|
||||||
|
this(swingset, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DemoModule(SwingSet2 swingset, String resourceName, String iconPath) {
|
||||||
|
UIManager.put("swing.boldMetal", Boolean.FALSE);
|
||||||
|
panel = new JPanel();
|
||||||
|
panel.setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
this.resourceName = resourceName;
|
||||||
|
this.iconPath = iconPath;
|
||||||
|
this.swingset = swingset;
|
||||||
|
|
||||||
|
loadSourceCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getResourceName() {
|
||||||
|
return resourceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JPanel getDemoPanel() {
|
||||||
|
return panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwingSet2 getSwingSet2() {
|
||||||
|
return swingset;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getString(String key) {
|
||||||
|
|
||||||
|
if (getSwingSet2() != null) {
|
||||||
|
return getSwingSet2().getString(key);
|
||||||
|
}else{
|
||||||
|
return "nada";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public char getMnemonic(String key) {
|
||||||
|
return (getString(key)).charAt(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ImageIcon createImageIcon(String filename, String description) {
|
||||||
|
if(getSwingSet2() != null) {
|
||||||
|
return getSwingSet2().createImageIcon(filename, description);
|
||||||
|
} else {
|
||||||
|
String path = "/resources/images/" + filename;
|
||||||
|
return new ImageIcon(getClass().getResource(path), description);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getSourceCode() {
|
||||||
|
return sourceCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadSourceCode() {
|
||||||
|
if(getResourceName() != null) {
|
||||||
|
String filename = getResourceName() + ".java";
|
||||||
|
sourceCode = new String("<html><body bgcolor=\"#ffffff\"><pre>");
|
||||||
|
InputStream is;
|
||||||
|
InputStreamReader isr;
|
||||||
|
URL url;
|
||||||
|
|
||||||
|
try {
|
||||||
|
url = getClass().getResource(filename);
|
||||||
|
is = url.openStream();
|
||||||
|
isr = new InputStreamReader(is, "UTF-8");
|
||||||
|
BufferedReader reader = new BufferedReader(isr);
|
||||||
|
|
||||||
|
// Read one line at a time, htmlize using super-spiffy
|
||||||
|
// html java code formating utility from www.CoolServlets.com
|
||||||
|
String line = reader.readLine();
|
||||||
|
while(line != null) {
|
||||||
|
sourceCode += line + " \n ";
|
||||||
|
line = reader.readLine();
|
||||||
|
}
|
||||||
|
sourceCode += new String("</pre></body></html>");
|
||||||
|
} catch (Exception ex) {
|
||||||
|
sourceCode = "Could not load file: " + filename;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return getString(getResourceName() + ".name");
|
||||||
|
};
|
||||||
|
|
||||||
|
public Icon getIcon() {
|
||||||
|
return createImageIcon(iconPath, getResourceName() + ".name");
|
||||||
|
};
|
||||||
|
|
||||||
|
public String getToolTip() {
|
||||||
|
return getString(getResourceName() + ".tooltip");
|
||||||
|
};
|
||||||
|
|
||||||
|
public void mainImpl() {
|
||||||
|
JFrame frame = new JFrame(getName());
|
||||||
|
frame.getContentPane().setLayout(new BorderLayout());
|
||||||
|
frame.getContentPane().add(getDemoPanel(), BorderLayout.CENTER);
|
||||||
|
getDemoPanel().setPreferredSize(new Dimension(PREFERRED_WIDTH, PREFERRED_HEIGHT));
|
||||||
|
frame.pack();
|
||||||
|
frame.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public JPanel createHorizontalPanel(boolean threeD) {
|
||||||
|
JPanel p = new JPanel();
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
|
||||||
|
p.setAlignmentY(TOP_ALIGNMENT);
|
||||||
|
p.setAlignmentX(LEFT_ALIGNMENT);
|
||||||
|
if(threeD) {
|
||||||
|
p.setBorder(loweredBorder);
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JPanel createVerticalPanel(boolean threeD) {
|
||||||
|
JPanel p = new JPanel();
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
|
||||||
|
p.setAlignmentY(TOP_ALIGNMENT);
|
||||||
|
p.setAlignmentX(LEFT_ALIGNMENT);
|
||||||
|
if(threeD) {
|
||||||
|
p.setBorder(loweredBorder);
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
DemoModule demo = new DemoModule(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init() {
|
||||||
|
getContentPane().setLayout(new BorderLayout());
|
||||||
|
getContentPane().add(getDemoPanel(), BorderLayout.CENTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateDragEnabled(boolean dragEnabled) {}
|
||||||
|
}
|
159
src/demo/share/jfc/SwingSet2/DirectionPanel.java
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
* @author Chester Rose
|
||||||
|
* @author Brian Beck
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class DirectionPanel extends JPanel {
|
||||||
|
|
||||||
|
private ButtonGroup group;
|
||||||
|
|
||||||
|
public DirectionPanel(boolean enable, String selection, ActionListener l) {
|
||||||
|
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
|
||||||
|
setAlignmentY(TOP_ALIGNMENT);
|
||||||
|
setAlignmentX(LEFT_ALIGNMENT);
|
||||||
|
|
||||||
|
Box firstThree = Box.createHorizontalBox();
|
||||||
|
Box secondThree = Box.createHorizontalBox();
|
||||||
|
Box thirdThree = Box.createHorizontalBox();
|
||||||
|
|
||||||
|
if(!enable) {
|
||||||
|
selection = "None";
|
||||||
|
}
|
||||||
|
|
||||||
|
group = new ButtonGroup();
|
||||||
|
DirectionButton b;
|
||||||
|
b = (DirectionButton) firstThree.add(new DirectionButton( tl_dot, tldn_dot, "NW", "Sets the orientation to the North-West", l, group, selection.equals("NW")));
|
||||||
|
b.setEnabled(enable);
|
||||||
|
b = (DirectionButton) firstThree.add(new DirectionButton( tm_dot, tmdn_dot, "N", "Sets the orientation to the North", l, group, selection.equals("N")));
|
||||||
|
b.setEnabled(enable);
|
||||||
|
b = (DirectionButton) firstThree.add(new DirectionButton( tr_dot, trdn_dot, "NE", "Sets the orientation to the North-East", l, group, selection.equals("NE")));
|
||||||
|
b.setEnabled(enable);
|
||||||
|
b = (DirectionButton) secondThree.add(new DirectionButton( ml_dot, mldn_dot, "W", "Sets the orientation to the West", l, group, selection.equals("W")));
|
||||||
|
b.setEnabled(enable);
|
||||||
|
b = (DirectionButton) secondThree.add(new DirectionButton( c_dot, cdn_dot, "C", "Sets the orientation to the Center", l, group, selection.equals("C")));
|
||||||
|
b.setEnabled(enable);
|
||||||
|
b = (DirectionButton) secondThree.add(new DirectionButton( mr_dot, mrdn_dot, "E", "Sets the orientation to the East", l, group, selection.equals("E")));
|
||||||
|
b.setEnabled(enable);
|
||||||
|
b = (DirectionButton) thirdThree.add(new DirectionButton( bl_dot, bldn_dot, "SW", "Sets the orientation to the South-West", l, group, selection.equals("SW")));
|
||||||
|
b.setEnabled(enable);
|
||||||
|
b = (DirectionButton) thirdThree.add(new DirectionButton( bm_dot, bmdn_dot, "S", "Sets the orientation to the South", l, group, selection.equals("S")));
|
||||||
|
b.setEnabled(enable);
|
||||||
|
b = (DirectionButton) thirdThree.add(new DirectionButton( br_dot, brdn_dot, "SE", "Sets the orientation to the South-East", l, group, selection.equals("SE")));
|
||||||
|
b.setEnabled(enable);
|
||||||
|
|
||||||
|
add(firstThree);
|
||||||
|
add(secondThree);
|
||||||
|
add(thirdThree);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSelection() {
|
||||||
|
return group.getSelection().getActionCommand();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelection( String selection ) {
|
||||||
|
Enumeration e = group.getElements();
|
||||||
|
while( e.hasMoreElements() ) {
|
||||||
|
JRadioButton b = (JRadioButton)e.nextElement();
|
||||||
|
if( b.getActionCommand().equals(selection) ) {
|
||||||
|
b.setSelected(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Chester's way cool layout buttons
|
||||||
|
public ImageIcon bl_dot = loadImageIcon("bl.gif","bottom left layout button");
|
||||||
|
public ImageIcon bldn_dot = loadImageIcon("bldn.gif","selected bottom left layout button");
|
||||||
|
public ImageIcon bm_dot = loadImageIcon("bm.gif","bottom middle layout button");
|
||||||
|
public ImageIcon bmdn_dot = loadImageIcon("bmdn.gif","selected bottom middle layout button");
|
||||||
|
public ImageIcon br_dot = loadImageIcon("br.gif","bottom right layout button");
|
||||||
|
public ImageIcon brdn_dot = loadImageIcon("brdn.gif","selected bottom right layout button");
|
||||||
|
public ImageIcon c_dot = loadImageIcon("c.gif","center layout button");
|
||||||
|
public ImageIcon cdn_dot = loadImageIcon("cdn.gif","selected center layout button");
|
||||||
|
public ImageIcon ml_dot = loadImageIcon("ml.gif","middle left layout button");
|
||||||
|
public ImageIcon mldn_dot = loadImageIcon("mldn.gif","selected middle left layout button");
|
||||||
|
public ImageIcon mr_dot = loadImageIcon("mr.gif","middle right layout button");
|
||||||
|
public ImageIcon mrdn_dot = loadImageIcon("mrdn.gif","selected middle right layout button");
|
||||||
|
public ImageIcon tl_dot = loadImageIcon("tl.gif","top left layout button");
|
||||||
|
public ImageIcon tldn_dot = loadImageIcon("tldn.gif","selected top left layout button");
|
||||||
|
public ImageIcon tm_dot = loadImageIcon("tm.gif","top middle layout button");
|
||||||
|
public ImageIcon tmdn_dot = loadImageIcon("tmdn.gif","selected top middle layout button");
|
||||||
|
public ImageIcon tr_dot = loadImageIcon("tr.gif","top right layout button");
|
||||||
|
public ImageIcon trdn_dot = loadImageIcon("trdn.gif","selected top right layout button");
|
||||||
|
|
||||||
|
public ImageIcon loadImageIcon(String filename, String description) {
|
||||||
|
String path = "/resources/images/buttons/" + filename;
|
||||||
|
return new ImageIcon(getClass().getResource(path), description);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class DirectionButton extends JRadioButton {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A layout direction button
|
||||||
|
*/
|
||||||
|
public DirectionButton(Icon icon, Icon downIcon, String direction,
|
||||||
|
String description, ActionListener l,
|
||||||
|
ButtonGroup group, boolean selected)
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
this.addActionListener(l);
|
||||||
|
setFocusPainted(false);
|
||||||
|
setHorizontalTextPosition(CENTER);
|
||||||
|
group.add(this);
|
||||||
|
setIcon(icon);
|
||||||
|
setSelectedIcon(downIcon);
|
||||||
|
setActionCommand(direction);
|
||||||
|
getAccessibleContext().setAccessibleName(direction);
|
||||||
|
getAccessibleContext().setAccessibleDescription(description);
|
||||||
|
setSelected(selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isFocusTraversable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBorder(Border b) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
56
src/demo/share/jfc/SwingSet2/EmeraldTheme.java
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import javax.swing.plaf.*;
|
||||||
|
import javax.swing.plaf.metal.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class describes a theme using glowing green colors.
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class EmeraldTheme extends DefaultMetalTheme {
|
||||||
|
|
||||||
|
public String getName() { return "Emerald"; }
|
||||||
|
|
||||||
|
private final ColorUIResource primary1 = new ColorUIResource(51, 142, 71);
|
||||||
|
private final ColorUIResource primary2 = new ColorUIResource(102, 193, 122);
|
||||||
|
private final ColorUIResource primary3 = new ColorUIResource(153, 244, 173);
|
||||||
|
|
||||||
|
protected ColorUIResource getPrimary1() { return primary1; }
|
||||||
|
protected ColorUIResource getPrimary2() { return primary2; }
|
||||||
|
protected ColorUIResource getPrimary3() { return primary3; }
|
||||||
|
|
||||||
|
}
|
176
src/demo/share/jfc/SwingSet2/ExampleFileView.java
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A convenience implementation of the FileView interface that
|
||||||
|
* manages name, icon, traversable, and file type information.
|
||||||
|
*
|
||||||
|
* This this implemention will work well with file systems that use
|
||||||
|
* "dot" extensions to indicate file type. For example: "picture.gif"
|
||||||
|
* as a gif image.
|
||||||
|
*
|
||||||
|
* If the java.io.File ever contains some of this information, such as
|
||||||
|
* file type, icon, and hidden file inforation, this implementation may
|
||||||
|
* become obsolete. At minimum, it should be rewritten at that time to
|
||||||
|
* use any new type information provided by java.io.File
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* JFileChooser chooser = new JFileChooser();
|
||||||
|
* fileView = new ExampleFileView();
|
||||||
|
* fileView.putIcon("jpg", new ImageIcon("images/jpgIcon.jpg"));
|
||||||
|
* fileView.putIcon("gif", new ImageIcon("images/gifIcon.gif"));
|
||||||
|
* chooser.setFileView(fileView);
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class ExampleFileView extends FileView {
|
||||||
|
private Hashtable icons = new Hashtable(5);
|
||||||
|
private Hashtable fileDescriptions = new Hashtable(5);
|
||||||
|
private Hashtable typeDescriptions = new Hashtable(5);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the file. Do nothing special here. Let
|
||||||
|
* the system file view handle this.
|
||||||
|
* @see FileView#getName
|
||||||
|
*/
|
||||||
|
public String getName(File f) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a human readable description of the file.
|
||||||
|
*/
|
||||||
|
public void putDescription(File f, String fileDescription) {
|
||||||
|
fileDescriptions.put(f, fileDescription);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A human readable description of the file.
|
||||||
|
*
|
||||||
|
* @see FileView#getDescription
|
||||||
|
*/
|
||||||
|
public String getDescription(File f) {
|
||||||
|
return (String) fileDescriptions.get(f);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a human readable type description for files. Based on "dot"
|
||||||
|
* extension strings, e.g: ".gif". Case is ignored.
|
||||||
|
*/
|
||||||
|
public void putTypeDescription(String extension, String typeDescription) {
|
||||||
|
typeDescriptions.put(extension, typeDescription);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a human readable type description for files of the type of
|
||||||
|
* the passed in file. Based on "dot" extension strings, e.g: ".gif".
|
||||||
|
* Case is ignored.
|
||||||
|
*/
|
||||||
|
public void putTypeDescription(File f, String typeDescription) {
|
||||||
|
putTypeDescription(getExtension(f), typeDescription);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A human readable description of the type of the file.
|
||||||
|
*
|
||||||
|
* @see FileView#getTypeDescription
|
||||||
|
*/
|
||||||
|
public String getTypeDescription(File f) {
|
||||||
|
return (String) typeDescriptions.get(getExtension(f));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience method that returns the "dot" extension for the
|
||||||
|
* given file.
|
||||||
|
*/
|
||||||
|
public String getExtension(File f) {
|
||||||
|
String name = f.getName();
|
||||||
|
if(name != null) {
|
||||||
|
int extensionIndex = name.lastIndexOf('.');
|
||||||
|
if(extensionIndex < 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return name.substring(extensionIndex+1).toLowerCase();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds an icon based on the file type "dot" extension
|
||||||
|
* string, e.g: ".gif". Case is ignored.
|
||||||
|
*/
|
||||||
|
public void putIcon(String extension, Icon icon) {
|
||||||
|
icons.put(extension, icon);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Icon that reperesents this file. Default implementation returns
|
||||||
|
* null. You might want to override this to return something more
|
||||||
|
* interesting.
|
||||||
|
*
|
||||||
|
* @see FileView#getIcon
|
||||||
|
*/
|
||||||
|
public Icon getIcon(File f) {
|
||||||
|
Icon icon = null;
|
||||||
|
String extension = getExtension(f);
|
||||||
|
if(extension != null) {
|
||||||
|
icon = (Icon) icons.get(extension);
|
||||||
|
}
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the directory is traversable or not. Generic implementation
|
||||||
|
* returns true for all directories and special folders.
|
||||||
|
*
|
||||||
|
* You might want to subtype ExampleFileView to do somethimg more interesting,
|
||||||
|
* such as recognize compound documents directories; in such a case you might
|
||||||
|
* return a special icon for the directory that makes it look like a regular
|
||||||
|
* document, and return false for isTraversable to not allow users to
|
||||||
|
* descend into the directory.
|
||||||
|
*
|
||||||
|
* @see FileView#isTraversable
|
||||||
|
*/
|
||||||
|
public Boolean isTraversable(File f) {
|
||||||
|
// if (some_reason) {
|
||||||
|
// return Boolean.FALSE;
|
||||||
|
// }
|
||||||
|
return null; // Use default from FileSystemView
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
436
src/demo/share/jfc/SwingSet2/FileChooserDemo.java
Normal file
@ -0,0 +1,436 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JFileChooserDemo
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class FileChooserDemo extends DemoModule {
|
||||||
|
JLabel theImage;
|
||||||
|
Icon jpgIcon;
|
||||||
|
Icon gifIcon;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
FileChooserDemo demo = new FileChooserDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FileChooserDemo Constructor
|
||||||
|
*/
|
||||||
|
public FileChooserDemo(SwingSet2 swingset) {
|
||||||
|
// Set the title for this demo, and an icon used to represent this
|
||||||
|
// demo inside the SwingSet2 app.
|
||||||
|
super(swingset, "FileChooserDemo", "toolbar/JFileChooser.gif");
|
||||||
|
createFileChooserDemo();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createFileChooserDemo() {
|
||||||
|
theImage = new JLabel("");
|
||||||
|
jpgIcon = createImageIcon("filechooser/jpgIcon.jpg", "jpg image");
|
||||||
|
gifIcon = createImageIcon("filechooser/gifIcon.gif", "gif image");
|
||||||
|
|
||||||
|
JPanel demoPanel = getDemoPanel();
|
||||||
|
demoPanel.setLayout(new BoxLayout(demoPanel, BoxLayout.Y_AXIS));
|
||||||
|
|
||||||
|
JPanel innerPanel = new JPanel();
|
||||||
|
innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.X_AXIS));
|
||||||
|
|
||||||
|
demoPanel.add(Box.createRigidArea(VGAP20));
|
||||||
|
demoPanel.add(innerPanel);
|
||||||
|
demoPanel.add(Box.createRigidArea(VGAP20));
|
||||||
|
|
||||||
|
innerPanel.add(Box.createRigidArea(HGAP20));
|
||||||
|
|
||||||
|
// Create a panel to hold buttons
|
||||||
|
JPanel buttonPanel = new JPanel() {
|
||||||
|
public Dimension getMaximumSize() {
|
||||||
|
return new Dimension(getPreferredSize().width, super.getMaximumSize().height);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));
|
||||||
|
|
||||||
|
buttonPanel.add(Box.createRigidArea(VGAP15));
|
||||||
|
buttonPanel.add(createPlainFileChooserButton());
|
||||||
|
buttonPanel.add(Box.createRigidArea(VGAP15));
|
||||||
|
buttonPanel.add(createPreviewFileChooserButton());
|
||||||
|
buttonPanel.add(Box.createRigidArea(VGAP15));
|
||||||
|
buttonPanel.add(createCustomFileChooserButton());
|
||||||
|
buttonPanel.add(Box.createVerticalGlue());
|
||||||
|
|
||||||
|
// Create a panel to hold the image
|
||||||
|
JPanel imagePanel = new JPanel();
|
||||||
|
imagePanel.setLayout(new BorderLayout());
|
||||||
|
imagePanel.setBorder(new BevelBorder(BevelBorder.LOWERED));
|
||||||
|
JScrollPane scroller = new JScrollPane(theImage);
|
||||||
|
scroller.getVerticalScrollBar().setUnitIncrement(10);
|
||||||
|
scroller.getHorizontalScrollBar().setUnitIncrement(10);
|
||||||
|
imagePanel.add(scroller, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
// add buttons and image panels to inner panel
|
||||||
|
innerPanel.add(buttonPanel);
|
||||||
|
innerPanel.add(Box.createRigidArea(HGAP30));
|
||||||
|
innerPanel.add(imagePanel);
|
||||||
|
innerPanel.add(Box.createRigidArea(HGAP20));
|
||||||
|
}
|
||||||
|
|
||||||
|
public JFileChooser createFileChooser() {
|
||||||
|
// create a filechooser
|
||||||
|
JFileChooser fc = new JFileChooser();
|
||||||
|
if (getSwingSet2() != null && getSwingSet2().isDragEnabled()) {
|
||||||
|
fc.setDragEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set the current directory to be the images directory
|
||||||
|
File swingFile = new File("resources/images/About.jpg");
|
||||||
|
if(swingFile.exists()) {
|
||||||
|
fc.setCurrentDirectory(swingFile);
|
||||||
|
fc.setSelectedFile(swingFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
return fc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public JButton createPlainFileChooserButton() {
|
||||||
|
Action a = new AbstractAction(getString("FileChooserDemo.plainbutton")) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JFileChooser fc = createFileChooser();
|
||||||
|
|
||||||
|
// show the filechooser
|
||||||
|
int result = fc.showOpenDialog(getDemoPanel());
|
||||||
|
|
||||||
|
// if we selected an image, load the image
|
||||||
|
if(result == JFileChooser.APPROVE_OPTION) {
|
||||||
|
loadImage(fc.getSelectedFile().getPath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return createButton(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JButton createPreviewFileChooserButton() {
|
||||||
|
Action a = new AbstractAction(getString("FileChooserDemo.previewbutton")) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JFileChooser fc = createFileChooser();
|
||||||
|
|
||||||
|
// Add filefilter & fileview
|
||||||
|
javax.swing.filechooser.FileFilter filter = createFileFilter(
|
||||||
|
getString("FileChooserDemo.filterdescription"),
|
||||||
|
"jpg", "gif");
|
||||||
|
ExampleFileView fileView = new ExampleFileView();
|
||||||
|
fileView.putIcon("jpg", jpgIcon);
|
||||||
|
fileView.putIcon("gif", gifIcon);
|
||||||
|
fc.setFileView(fileView);
|
||||||
|
fc.addChoosableFileFilter(filter);
|
||||||
|
fc.setFileFilter(filter);
|
||||||
|
|
||||||
|
// add preview accessory
|
||||||
|
fc.setAccessory(new FilePreviewer(fc));
|
||||||
|
|
||||||
|
// show the filechooser
|
||||||
|
int result = fc.showOpenDialog(getDemoPanel());
|
||||||
|
|
||||||
|
// if we selected an image, load the image
|
||||||
|
if(result == JFileChooser.APPROVE_OPTION) {
|
||||||
|
loadImage(fc.getSelectedFile().getPath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return createButton(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
JDialog dialog;
|
||||||
|
JFileChooser fc;
|
||||||
|
|
||||||
|
private javax.swing.filechooser.FileFilter createFileFilter(
|
||||||
|
String description, String...extensions) {
|
||||||
|
description = createFileNameFilterDescriptionFromExtensions(
|
||||||
|
description, extensions);
|
||||||
|
return new FileNameExtensionFilter(description, extensions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String createFileNameFilterDescriptionFromExtensions(
|
||||||
|
String description, String[] extensions) {
|
||||||
|
String fullDescription = (description == null) ?
|
||||||
|
"(" : description + " (";
|
||||||
|
// build the description from the extension list
|
||||||
|
fullDescription += "." + extensions[0];
|
||||||
|
for (int i = 1; i < extensions.length; i++) {
|
||||||
|
fullDescription += ", .";
|
||||||
|
fullDescription += extensions[i];
|
||||||
|
}
|
||||||
|
fullDescription += ")";
|
||||||
|
return fullDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JButton createCustomFileChooserButton() {
|
||||||
|
Action a = new AbstractAction(getString("FileChooserDemo.custombutton")) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
fc = createFileChooser();
|
||||||
|
|
||||||
|
// Add filefilter & fileview
|
||||||
|
javax.swing.filechooser.FileFilter filter = createFileFilter(
|
||||||
|
getString("FileChooserDemo.filterdescription"),
|
||||||
|
"jpg", "gif");
|
||||||
|
ExampleFileView fileView = new ExampleFileView();
|
||||||
|
fileView.putIcon("jpg", jpgIcon);
|
||||||
|
fileView.putIcon("gif", gifIcon);
|
||||||
|
fc.setFileView(fileView);
|
||||||
|
fc.addChoosableFileFilter(filter);
|
||||||
|
|
||||||
|
// add preview accessory
|
||||||
|
fc.setAccessory(new FilePreviewer(fc));
|
||||||
|
|
||||||
|
// remove the approve/cancel buttons
|
||||||
|
fc.setControlButtonsAreShown(false);
|
||||||
|
|
||||||
|
// make custom controls
|
||||||
|
//wokka
|
||||||
|
JPanel custom = new JPanel();
|
||||||
|
custom.setLayout(new BoxLayout(custom, BoxLayout.Y_AXIS));
|
||||||
|
custom.add(Box.createRigidArea(VGAP10));
|
||||||
|
JLabel description = new JLabel(getString("FileChooserDemo.description"));
|
||||||
|
description.setAlignmentX(JLabel.CENTER_ALIGNMENT);
|
||||||
|
custom.add(description);
|
||||||
|
custom.add(Box.createRigidArea(VGAP10));
|
||||||
|
custom.add(fc);
|
||||||
|
|
||||||
|
Action okAction = createOKAction();
|
||||||
|
fc.addActionListener(okAction);
|
||||||
|
|
||||||
|
JPanel buttons = new JPanel();
|
||||||
|
buttons.setLayout(new BoxLayout(buttons, BoxLayout.X_AXIS));
|
||||||
|
buttons.add(Box.createRigidArea(HGAP10));
|
||||||
|
buttons.add(createImageButton(createFindAction()));
|
||||||
|
buttons.add(Box.createRigidArea(HGAP10));
|
||||||
|
buttons.add(createButton(createAboutAction()));
|
||||||
|
buttons.add(Box.createRigidArea(HGAP10));
|
||||||
|
buttons.add(createButton(okAction));
|
||||||
|
buttons.add(Box.createRigidArea(HGAP10));
|
||||||
|
buttons.add(createButton(createCancelAction()));
|
||||||
|
buttons.add(Box.createRigidArea(HGAP10));
|
||||||
|
buttons.add(createImageButton(createHelpAction()));
|
||||||
|
buttons.add(Box.createRigidArea(HGAP10));
|
||||||
|
|
||||||
|
custom.add(buttons);
|
||||||
|
custom.add(Box.createRigidArea(VGAP10));
|
||||||
|
|
||||||
|
// show the filechooser
|
||||||
|
Frame parent = (Frame) SwingUtilities.getAncestorOfClass(Frame.class, getDemoPanel());
|
||||||
|
dialog = new JDialog(parent, getString("FileChooserDemo.dialogtitle"), true);
|
||||||
|
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
||||||
|
dialog.getContentPane().add(custom, BorderLayout.CENTER);
|
||||||
|
dialog.pack();
|
||||||
|
dialog.setLocationRelativeTo(getDemoPanel());
|
||||||
|
dialog.show();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return createButton(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action createAboutAction() {
|
||||||
|
return new AbstractAction(getString("FileChooserDemo.about")) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
File file = fc.getSelectedFile();
|
||||||
|
String text;
|
||||||
|
if(file == null) {
|
||||||
|
text = getString("FileChooserDemo.nofileselected");
|
||||||
|
} else {
|
||||||
|
text = "<html>" + getString("FileChooserDemo.thefile");
|
||||||
|
text += "<br><font color=green>" + file.getName() + "</font><br>";
|
||||||
|
text += getString("FileChooserDemo.isprobably") + "</html>";
|
||||||
|
}
|
||||||
|
JOptionPane.showMessageDialog(getDemoPanel(), text);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action createOKAction() {
|
||||||
|
return new AbstractAction(getString("FileChooserDemo.ok")) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
dialog.dispose();
|
||||||
|
if (!e.getActionCommand().equals(JFileChooser.CANCEL_SELECTION)
|
||||||
|
&& fc.getSelectedFile() != null) {
|
||||||
|
|
||||||
|
loadImage(fc.getSelectedFile().getPath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action createCancelAction() {
|
||||||
|
return new AbstractAction(getString("FileChooserDemo.cancel")) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
dialog.dispose();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action createFindAction() {
|
||||||
|
Icon icon = createImageIcon("filechooser/find.gif", getString("FileChooserDemo.find"));
|
||||||
|
return new AbstractAction("", icon) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
String result = JOptionPane.showInputDialog(getDemoPanel(), getString("FileChooserDemo.findquestion"));
|
||||||
|
if (result != null) {
|
||||||
|
JOptionPane.showMessageDialog(getDemoPanel(), getString("FileChooserDemo.findresponse"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action createHelpAction() {
|
||||||
|
Icon icon = createImageIcon("filechooser/help.gif", getString("FileChooserDemo.help"));
|
||||||
|
return new AbstractAction("", icon) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JOptionPane.showMessageDialog(getDemoPanel(), getString("FileChooserDemo.helptext"));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyImageIcon extends ImageIcon {
|
||||||
|
public MyImageIcon(String filename) {
|
||||||
|
super(filename);
|
||||||
|
};
|
||||||
|
public synchronized void paintIcon(Component c, Graphics g, int x, int y) {
|
||||||
|
g.setColor(Color.white);
|
||||||
|
g.fillRect(0,0, c.getWidth(), c.getHeight());
|
||||||
|
if(getImageObserver() == null) {
|
||||||
|
g.drawImage(
|
||||||
|
getImage(),
|
||||||
|
c.getWidth()/2 - getIconWidth()/2,
|
||||||
|
c.getHeight()/2 - getIconHeight()/2,
|
||||||
|
c
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
g.drawImage(
|
||||||
|
getImage(),
|
||||||
|
c.getWidth()/2 - getIconWidth()/2,
|
||||||
|
c.getHeight()/2 - getIconHeight()/2,
|
||||||
|
getImageObserver()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadImage(String filename) {
|
||||||
|
theImage.setIcon(new MyImageIcon(filename));
|
||||||
|
}
|
||||||
|
|
||||||
|
public JButton createButton(Action a) {
|
||||||
|
JButton b = new JButton(a) {
|
||||||
|
public Dimension getMaximumSize() {
|
||||||
|
int width = Short.MAX_VALUE;
|
||||||
|
int height = super.getMaximumSize().height;
|
||||||
|
return new Dimension(width, height);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JButton createImageButton(Action a) {
|
||||||
|
JButton b = new JButton(a);
|
||||||
|
b.setMargin(new Insets(0,0,0,0));
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class FilePreviewer extends JComponent implements PropertyChangeListener {
|
||||||
|
ImageIcon thumbnail = null;
|
||||||
|
|
||||||
|
public FilePreviewer(JFileChooser fc) {
|
||||||
|
setPreferredSize(new Dimension(100, 50));
|
||||||
|
fc.addPropertyChangeListener(this);
|
||||||
|
setBorder(new BevelBorder(BevelBorder.LOWERED));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadImage(File f) {
|
||||||
|
if (f == null) {
|
||||||
|
thumbnail = null;
|
||||||
|
} else {
|
||||||
|
ImageIcon tmpIcon = new ImageIcon(f.getPath());
|
||||||
|
if(tmpIcon.getIconWidth() > 90) {
|
||||||
|
thumbnail = new ImageIcon(
|
||||||
|
tmpIcon.getImage().getScaledInstance(90, -1, Image.SCALE_DEFAULT));
|
||||||
|
} else {
|
||||||
|
thumbnail = tmpIcon;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void propertyChange(PropertyChangeEvent e) {
|
||||||
|
String prop = e.getPropertyName();
|
||||||
|
if(prop == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY) {
|
||||||
|
if(isShowing()) {
|
||||||
|
loadImage((File) e.getNewValue());
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paint(Graphics g) {
|
||||||
|
super.paint(g);
|
||||||
|
if(thumbnail != null) {
|
||||||
|
int x = getWidth()/2 - thumbnail.getIconWidth()/2;
|
||||||
|
int y = getHeight()/2 - thumbnail.getIconHeight()/2;
|
||||||
|
if(y < 0) {
|
||||||
|
y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(x < 5) {
|
||||||
|
x = 5;
|
||||||
|
}
|
||||||
|
thumbnail.paintIcon(this, g, x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
129
src/demo/share/jfc/SwingSet2/HtmlDemo.java
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.text.html.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Html Demo
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class HtmlDemo extends DemoModule {
|
||||||
|
|
||||||
|
JEditorPane html;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
HtmlDemo demo = new HtmlDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HtmlDemo Constructor
|
||||||
|
*/
|
||||||
|
public HtmlDemo(SwingSet2 swingset) {
|
||||||
|
// Set the title for this demo, and an icon used to represent this
|
||||||
|
// demo inside the SwingSet2 app.
|
||||||
|
super(swingset, "HtmlDemo", "toolbar/JEditorPane.gif");
|
||||||
|
|
||||||
|
try {
|
||||||
|
URL url = null;
|
||||||
|
// System.getProperty("user.dir") +
|
||||||
|
// System.getProperty("file.separator");
|
||||||
|
String path = null;
|
||||||
|
try {
|
||||||
|
path = "/resources/index.html";
|
||||||
|
url = getClass().getResource(path);
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("Failed to open " + path);
|
||||||
|
url = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(url != null) {
|
||||||
|
html = new JEditorPane(url);
|
||||||
|
html.setEditable(false);
|
||||||
|
html.addHyperlinkListener(createHyperLinkListener());
|
||||||
|
|
||||||
|
JScrollPane scroller = new JScrollPane();
|
||||||
|
JViewport vp = scroller.getViewport();
|
||||||
|
vp.add(html);
|
||||||
|
getDemoPanel().add(scroller, BorderLayout.CENTER);
|
||||||
|
}
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
System.out.println("Malformed URL: " + e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println("IOException: " + e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public HyperlinkListener createHyperLinkListener() {
|
||||||
|
return new HyperlinkListener() {
|
||||||
|
public void hyperlinkUpdate(HyperlinkEvent e) {
|
||||||
|
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
|
||||||
|
if (e instanceof HTMLFrameHyperlinkEvent) {
|
||||||
|
((HTMLDocument)html.getDocument()).processHTMLFrameHyperlinkEvent(
|
||||||
|
(HTMLFrameHyperlinkEvent)e);
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
html.setPage(e.getURL());
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
System.out.println("IOE: " + ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateDragEnabled(boolean dragEnabled) {
|
||||||
|
html.setDragEnabled(dragEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
342
src/demo/share/jfc/SwingSet2/InternalFrameDemo.java
Normal file
@ -0,0 +1,342 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal Frames Demo
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class InternalFrameDemo extends DemoModule {
|
||||||
|
int windowCount = 0;
|
||||||
|
JDesktopPane desktop = null;
|
||||||
|
|
||||||
|
ImageIcon icon1, icon2, icon3, icon4;
|
||||||
|
ImageIcon smIcon1, smIcon2, smIcon3, smIcon4;
|
||||||
|
|
||||||
|
public Integer FIRST_FRAME_LAYER = new Integer(1);
|
||||||
|
public Integer DEMO_FRAME_LAYER = new Integer(2);
|
||||||
|
public Integer PALETTE_LAYER = new Integer(3);
|
||||||
|
|
||||||
|
public int FRAME0_X = 15;
|
||||||
|
public int FRAME0_Y = 280;
|
||||||
|
|
||||||
|
public int FRAME0_WIDTH = 320;
|
||||||
|
public int FRAME0_HEIGHT = 230;
|
||||||
|
|
||||||
|
public int FRAME_WIDTH = 225;
|
||||||
|
public int FRAME_HEIGHT = 150;
|
||||||
|
|
||||||
|
public int PALETTE_X = 375;
|
||||||
|
public int PALETTE_Y = 20;
|
||||||
|
|
||||||
|
public int PALETTE_WIDTH = 260;
|
||||||
|
public int PALETTE_HEIGHT = 260;
|
||||||
|
|
||||||
|
JCheckBox windowResizable = null;
|
||||||
|
JCheckBox windowClosable = null;
|
||||||
|
JCheckBox windowIconifiable = null;
|
||||||
|
JCheckBox windowMaximizable = null;
|
||||||
|
|
||||||
|
JTextField windowTitleField = null;
|
||||||
|
JLabel windowTitleLabel = null;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
InternalFrameDemo demo = new InternalFrameDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* InternalFrameDemo Constructor
|
||||||
|
*/
|
||||||
|
public InternalFrameDemo(SwingSet2 swingset) {
|
||||||
|
super(swingset, "InternalFrameDemo", "toolbar/JDesktop.gif");
|
||||||
|
|
||||||
|
// preload all the icons we need for this demo
|
||||||
|
icon1 = createImageIcon("misc/toast.gif", getString("InternalFrameDemo.toast"));
|
||||||
|
icon2 = createImageIcon("misc/duke.gif", getString("InternalFrameDemo.duke"));
|
||||||
|
icon3 = createImageIcon("misc/duchess.gif", getString("InternalFrameDemo.duchess"));
|
||||||
|
icon4 = createImageIcon("misc/cab.gif", getString("InternalFrameDemo.cab"));
|
||||||
|
|
||||||
|
smIcon1 = createImageIcon("misc/toast_small.gif", getString("InternalFrameDemo.toast"));
|
||||||
|
smIcon2 = createImageIcon("misc/duke_small.gif", getString("InternalFrameDemo.duke"));
|
||||||
|
smIcon3 = createImageIcon("misc/duchess_small.gif", getString("InternalFrameDemo.duchess"));
|
||||||
|
smIcon4 = createImageIcon("misc/cab_small.gif", getString("InternalFrameDemo.cab"));
|
||||||
|
|
||||||
|
// Create the desktop pane
|
||||||
|
desktop = new JDesktopPane();
|
||||||
|
getDemoPanel().add(desktop, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
// Create the "frame maker" palette
|
||||||
|
createInternalFramePalette();
|
||||||
|
|
||||||
|
// Create an initial internal frame to show
|
||||||
|
JInternalFrame frame1 = createInternalFrame(icon1, FIRST_FRAME_LAYER, 1, 1);
|
||||||
|
frame1.setBounds(FRAME0_X, FRAME0_Y, FRAME0_WIDTH, FRAME0_HEIGHT);
|
||||||
|
|
||||||
|
// Create four more starter windows
|
||||||
|
createInternalFrame(icon1, DEMO_FRAME_LAYER, FRAME_WIDTH, FRAME_HEIGHT);
|
||||||
|
createInternalFrame(icon3, DEMO_FRAME_LAYER, FRAME_WIDTH, FRAME_HEIGHT);
|
||||||
|
createInternalFrame(icon4, DEMO_FRAME_LAYER, FRAME_WIDTH, FRAME_HEIGHT);
|
||||||
|
createInternalFrame(icon2, DEMO_FRAME_LAYER, FRAME_WIDTH, FRAME_HEIGHT);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an internal frame and add a scrollable imageicon to it
|
||||||
|
*/
|
||||||
|
public JInternalFrame createInternalFrame(Icon icon, Integer layer, int width, int height) {
|
||||||
|
JInternalFrame jif = new JInternalFrame();
|
||||||
|
|
||||||
|
if(!windowTitleField.getText().equals(getString("InternalFrameDemo.frame_label"))) {
|
||||||
|
jif.setTitle(windowTitleField.getText() + " ");
|
||||||
|
} else {
|
||||||
|
jif = new JInternalFrame(getString("InternalFrameDemo.frame_label") + " " + windowCount + " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
// set properties
|
||||||
|
jif.setClosable(windowClosable.isSelected());
|
||||||
|
jif.setMaximizable(windowMaximizable.isSelected());
|
||||||
|
jif.setIconifiable(windowIconifiable.isSelected());
|
||||||
|
jif.setResizable(windowResizable.isSelected());
|
||||||
|
|
||||||
|
jif.setBounds(20*(windowCount%10), 20*(windowCount%10), width, height);
|
||||||
|
jif.setContentPane(new ImageScroller(this, icon, 0, windowCount));
|
||||||
|
|
||||||
|
windowCount++;
|
||||||
|
|
||||||
|
desktop.add(jif, layer);
|
||||||
|
|
||||||
|
// Set this internal frame to be selected
|
||||||
|
|
||||||
|
try {
|
||||||
|
jif.setSelected(true);
|
||||||
|
} catch (java.beans.PropertyVetoException e2) {
|
||||||
|
}
|
||||||
|
|
||||||
|
jif.show();
|
||||||
|
|
||||||
|
return jif;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JInternalFrame createInternalFramePalette() {
|
||||||
|
JInternalFrame palette = new JInternalFrame(
|
||||||
|
getString("InternalFrameDemo.palette_label")
|
||||||
|
);
|
||||||
|
palette.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
|
||||||
|
palette.getContentPane().setLayout(new BorderLayout());
|
||||||
|
palette.setBounds(PALETTE_X, PALETTE_Y, PALETTE_WIDTH, PALETTE_HEIGHT);
|
||||||
|
palette.setResizable(true);
|
||||||
|
palette.setIconifiable(true);
|
||||||
|
desktop.add(palette, PALETTE_LAYER);
|
||||||
|
|
||||||
|
// *************************************
|
||||||
|
// * Create create frame maker buttons *
|
||||||
|
// *************************************
|
||||||
|
JButton b1 = new JButton(smIcon1);
|
||||||
|
JButton b2 = new JButton(smIcon2);
|
||||||
|
JButton b3 = new JButton(smIcon3);
|
||||||
|
JButton b4 = new JButton(smIcon4);
|
||||||
|
|
||||||
|
// add frame maker actions
|
||||||
|
b1.addActionListener(new ShowFrameAction(this, icon1));
|
||||||
|
b2.addActionListener(new ShowFrameAction(this, icon2));
|
||||||
|
b3.addActionListener(new ShowFrameAction(this, icon3));
|
||||||
|
b4.addActionListener(new ShowFrameAction(this, icon4));
|
||||||
|
|
||||||
|
// add frame maker buttons to panel
|
||||||
|
JPanel p = new JPanel();
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
|
||||||
|
|
||||||
|
JPanel buttons1 = new JPanel();
|
||||||
|
buttons1.setLayout(new BoxLayout(buttons1, BoxLayout.X_AXIS));
|
||||||
|
|
||||||
|
JPanel buttons2 = new JPanel();
|
||||||
|
buttons2.setLayout(new BoxLayout(buttons2, BoxLayout.X_AXIS));
|
||||||
|
|
||||||
|
buttons1.add(b1);
|
||||||
|
buttons1.add(Box.createRigidArea(HGAP15));
|
||||||
|
buttons1.add(b2);
|
||||||
|
|
||||||
|
buttons2.add(b3);
|
||||||
|
buttons2.add(Box.createRigidArea(HGAP15));
|
||||||
|
buttons2.add(b4);
|
||||||
|
|
||||||
|
p.add(Box.createRigidArea(VGAP10));
|
||||||
|
p.add(buttons1);
|
||||||
|
p.add(Box.createRigidArea(VGAP15));
|
||||||
|
p.add(buttons2);
|
||||||
|
p.add(Box.createRigidArea(VGAP10));
|
||||||
|
|
||||||
|
palette.getContentPane().add(p, BorderLayout.NORTH);
|
||||||
|
|
||||||
|
// ************************************
|
||||||
|
// * Create frame property checkboxes *
|
||||||
|
// ************************************
|
||||||
|
p = new JPanel() {
|
||||||
|
Insets insets = new Insets(10,15,10,5);
|
||||||
|
public Insets getInsets() {
|
||||||
|
return insets;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
p.setLayout(new GridLayout(1,2));
|
||||||
|
|
||||||
|
|
||||||
|
Box box = new Box(BoxLayout.Y_AXIS);
|
||||||
|
windowResizable = new JCheckBox(getString("InternalFrameDemo.resizable_label"), true);
|
||||||
|
windowIconifiable = new JCheckBox(getString("InternalFrameDemo.iconifiable_label"), true);
|
||||||
|
|
||||||
|
box.add(Box.createGlue());
|
||||||
|
box.add(windowResizable);
|
||||||
|
box.add(windowIconifiable);
|
||||||
|
box.add(Box.createGlue());
|
||||||
|
p.add(box);
|
||||||
|
|
||||||
|
box = new Box(BoxLayout.Y_AXIS);
|
||||||
|
windowClosable = new JCheckBox(getString("InternalFrameDemo.closable_label"), true);
|
||||||
|
windowMaximizable = new JCheckBox(getString("InternalFrameDemo.maximizable_label"), true);
|
||||||
|
|
||||||
|
box.add(Box.createGlue());
|
||||||
|
box.add(windowClosable);
|
||||||
|
box.add(windowMaximizable);
|
||||||
|
box.add(Box.createGlue());
|
||||||
|
p.add(box);
|
||||||
|
|
||||||
|
palette.getContentPane().add(p, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************
|
||||||
|
// * Create Frame title textfield *
|
||||||
|
// ************************************
|
||||||
|
p = new JPanel() {
|
||||||
|
Insets insets = new Insets(0,0,10,0);
|
||||||
|
public Insets getInsets() {
|
||||||
|
return insets;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
windowTitleField = new JTextField(getString("InternalFrameDemo.frame_label"));
|
||||||
|
windowTitleLabel = new JLabel(getString("InternalFrameDemo.title_text_field_label"));
|
||||||
|
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
|
||||||
|
p.add(Box.createRigidArea(HGAP5));
|
||||||
|
p.add(windowTitleLabel, BorderLayout.WEST);
|
||||||
|
p.add(Box.createRigidArea(HGAP5));
|
||||||
|
p.add(windowTitleField, BorderLayout.CENTER);
|
||||||
|
p.add(Box.createRigidArea(HGAP5));
|
||||||
|
|
||||||
|
palette.getContentPane().add(p, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
palette.show();
|
||||||
|
|
||||||
|
return palette;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class ShowFrameAction extends AbstractAction {
|
||||||
|
InternalFrameDemo demo;
|
||||||
|
Icon icon;
|
||||||
|
|
||||||
|
|
||||||
|
public ShowFrameAction(InternalFrameDemo demo, Icon icon) {
|
||||||
|
this.demo = demo;
|
||||||
|
this.icon = icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
demo.createInternalFrame(icon,
|
||||||
|
getDemoFrameLayer(),
|
||||||
|
getFrameWidth(),
|
||||||
|
getFrameHeight()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFrameWidth() {
|
||||||
|
return FRAME_WIDTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFrameHeight() {
|
||||||
|
return FRAME_HEIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getDemoFrameLayer() {
|
||||||
|
return DEMO_FRAME_LAYER;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ImageScroller extends JScrollPane {
|
||||||
|
|
||||||
|
public ImageScroller(InternalFrameDemo demo, Icon icon, int layer, int count) {
|
||||||
|
super();
|
||||||
|
JPanel p = new JPanel();
|
||||||
|
p.setBackground(Color.white);
|
||||||
|
p.setLayout(new BorderLayout() );
|
||||||
|
|
||||||
|
p.add(new JLabel(icon), BorderLayout.CENTER);
|
||||||
|
|
||||||
|
getViewport().add(p);
|
||||||
|
getHorizontalScrollBar().setUnitIncrement(10);
|
||||||
|
getVerticalScrollBar().setUnitIncrement(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Dimension getMinimumSize() {
|
||||||
|
return new Dimension(25, 25);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateDragEnabled(boolean dragEnabled) {
|
||||||
|
windowTitleField.setDragEnabled(dragEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
334
src/demo/share/jfc/SwingSet2/LayoutControlPanel.java
Normal file
@ -0,0 +1,334 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The LayoutControlPanel contains controls for setting an
|
||||||
|
* AbstractButton's horizontal and vertical text position and
|
||||||
|
* horizontal and vertical alignment.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class LayoutControlPanel extends JPanel implements SwingConstants {
|
||||||
|
|
||||||
|
private boolean absolutePositions;
|
||||||
|
private DirectionPanel textPosition = null;
|
||||||
|
private DirectionPanel labelAlignment = null;
|
||||||
|
private ButtonDemo demo = null;
|
||||||
|
|
||||||
|
// private ComponentOrientChanger componentOrientChanger = null;
|
||||||
|
|
||||||
|
LayoutControlPanel(ButtonDemo demo) {
|
||||||
|
this.demo = demo;
|
||||||
|
|
||||||
|
// this.componentOrientationChanger = componentOrientationChanger;
|
||||||
|
|
||||||
|
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
|
||||||
|
setAlignmentX(LEFT_ALIGNMENT);
|
||||||
|
setAlignmentY(TOP_ALIGNMENT);
|
||||||
|
|
||||||
|
JLabel l;
|
||||||
|
|
||||||
|
// If SwingSet has a ComponentOrientationChanger, then include control
|
||||||
|
// for choosing between absolute and relative positioning. This will
|
||||||
|
// only happen when we're running on JDK 1.2 or above.
|
||||||
|
//
|
||||||
|
// if(componentOrientationChanger != null ) {
|
||||||
|
// l = new JLabel("Positioning:");
|
||||||
|
// add(l);
|
||||||
|
//
|
||||||
|
// ButtonGroup group = new ButtonGroup();
|
||||||
|
// PositioningListener positioningListener = new PositioningListener();
|
||||||
|
// JRadioButton absolutePos = new JRadioButton("Absolute");
|
||||||
|
// absolutePos.setMnemonic('a');
|
||||||
|
// absolutePos.setToolTipText("Text/Content positioning is independant of line direction");
|
||||||
|
// group.add(absolutePos);
|
||||||
|
// absolutePos.addItemListener(positioningListener);
|
||||||
|
// add(absolutePos);
|
||||||
|
//
|
||||||
|
// JRadioButton relativePos = new JRadioButton("Relative");
|
||||||
|
// relativePos.setMnemonic('r');
|
||||||
|
// relativePos.setToolTipText("Text/Content positioning depends on line direction.");
|
||||||
|
// group.add(relativePos);
|
||||||
|
// relativePos.addItemListener(positioningListener);
|
||||||
|
// add(relativePos);
|
||||||
|
//
|
||||||
|
// add(Box.createRigidArea(demo.VGAP20));
|
||||||
|
//
|
||||||
|
// absolutePositions = false;
|
||||||
|
// relativePos.setSelected(true);
|
||||||
|
//
|
||||||
|
// componentOrientationChanger.addActionListener( new OrientationChangeListener() );
|
||||||
|
//} else {
|
||||||
|
absolutePositions = true;
|
||||||
|
//}
|
||||||
|
|
||||||
|
textPosition = new DirectionPanel(true, "E", new TextPositionListener());
|
||||||
|
labelAlignment = new DirectionPanel(true, "C", new LabelAlignmentListener());
|
||||||
|
|
||||||
|
// Make sure the controls' text position and label alignment match
|
||||||
|
// the initial value of the associated direction panel.
|
||||||
|
for(int i = 0; i < demo.getCurrentControls().size(); i++) {
|
||||||
|
Component c = (Component) demo.getCurrentControls().elementAt(i);
|
||||||
|
setPosition(c, RIGHT, CENTER);
|
||||||
|
setAlignment(c,CENTER,CENTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
l = new JLabel(demo.getString("LayoutControlPanel.textposition_label"));
|
||||||
|
add(l);
|
||||||
|
add(textPosition);
|
||||||
|
|
||||||
|
add(Box.createRigidArea(demo.VGAP20));
|
||||||
|
|
||||||
|
l = new JLabel(demo.getString("LayoutControlPanel.contentalignment_label"));
|
||||||
|
add(l);
|
||||||
|
add(labelAlignment);
|
||||||
|
|
||||||
|
add(Box.createGlue());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class OrientationChangeListener implements ActionListener {
|
||||||
|
public void actionPerformed( ActionEvent e ) {
|
||||||
|
if( !e.getActionCommand().equals("OrientationChanged") ){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if( absolutePositions ){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String currentTextPosition = textPosition.getSelection();
|
||||||
|
if( currentTextPosition.equals("NW") )
|
||||||
|
textPosition.setSelection("NE");
|
||||||
|
else if( currentTextPosition.equals("NE") )
|
||||||
|
textPosition.setSelection("NW");
|
||||||
|
else if( currentTextPosition.equals("E") )
|
||||||
|
textPosition.setSelection("W");
|
||||||
|
else if( currentTextPosition.equals("W") )
|
||||||
|
textPosition.setSelection("E");
|
||||||
|
else if( currentTextPosition.equals("SE") )
|
||||||
|
textPosition.setSelection("SW");
|
||||||
|
else if( currentTextPosition.equals("SW") )
|
||||||
|
textPosition.setSelection("SE");
|
||||||
|
|
||||||
|
String currentLabelAlignment = labelAlignment.getSelection();
|
||||||
|
if( currentLabelAlignment.equals("NW") )
|
||||||
|
labelAlignment.setSelection("NE");
|
||||||
|
else if( currentLabelAlignment.equals("NE") )
|
||||||
|
labelAlignment.setSelection("NW");
|
||||||
|
else if( currentLabelAlignment.equals("E") )
|
||||||
|
labelAlignment.setSelection("W");
|
||||||
|
else if( currentLabelAlignment.equals("W") )
|
||||||
|
labelAlignment.setSelection("E");
|
||||||
|
else if( currentLabelAlignment.equals("SE") )
|
||||||
|
labelAlignment.setSelection("SW");
|
||||||
|
else if( currentLabelAlignment.equals("SW") )
|
||||||
|
labelAlignment.setSelection("SE");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PositioningListener implements ItemListener {
|
||||||
|
|
||||||
|
public void itemStateChanged(ItemEvent e) {
|
||||||
|
JRadioButton rb = (JRadioButton) e.getSource();
|
||||||
|
if(rb.getText().equals("Absolute") && rb.isSelected()) {
|
||||||
|
absolutePositions = true;
|
||||||
|
} else if(rb.getText().equals("Relative") && rb.isSelected()) {
|
||||||
|
absolutePositions = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < demo.getCurrentControls().size(); i++) {
|
||||||
|
Component c = (Component) demo.getCurrentControls().elementAt(i);
|
||||||
|
int hPos, vPos, hAlign, vAlign;
|
||||||
|
if( c instanceof AbstractButton ) {
|
||||||
|
hPos = ((AbstractButton)c).getHorizontalTextPosition();
|
||||||
|
vPos = ((AbstractButton)c).getVerticalTextPosition();
|
||||||
|
hAlign = ((AbstractButton)c).getHorizontalAlignment();
|
||||||
|
vAlign = ((AbstractButton)c).getVerticalAlignment();
|
||||||
|
} else if( c instanceof JLabel ) {
|
||||||
|
hPos = ((JLabel)c).getHorizontalTextPosition();
|
||||||
|
vPos = ((JLabel)c).getVerticalTextPosition();
|
||||||
|
hAlign = ((JLabel)c).getHorizontalAlignment();
|
||||||
|
vAlign = ((JLabel)c).getVerticalAlignment();
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
setPosition(c, hPos, vPos);
|
||||||
|
setAlignment(c, hAlign, vAlign);
|
||||||
|
}
|
||||||
|
|
||||||
|
demo.invalidate();
|
||||||
|
demo.validate();
|
||||||
|
demo.repaint();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Text Position Listener
|
||||||
|
class TextPositionListener implements ActionListener {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JRadioButton rb = (JRadioButton) e.getSource();
|
||||||
|
if(!rb.isSelected()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String cmd = rb.getActionCommand();
|
||||||
|
int hPos, vPos;
|
||||||
|
if(cmd.equals("NW")) {
|
||||||
|
hPos = LEFT; vPos = TOP;
|
||||||
|
} else if(cmd.equals("N")) {
|
||||||
|
hPos = CENTER; vPos = TOP;
|
||||||
|
} else if(cmd.equals("NE")) {
|
||||||
|
hPos = RIGHT; vPos = TOP;
|
||||||
|
} else if(cmd.equals("W")) {
|
||||||
|
hPos = LEFT; vPos = CENTER;
|
||||||
|
} else if(cmd.equals("C")) {
|
||||||
|
hPos = CENTER; vPos = CENTER;
|
||||||
|
} else if(cmd.equals("E")) {
|
||||||
|
hPos = RIGHT; vPos = CENTER;
|
||||||
|
} else if(cmd.equals("SW")) {
|
||||||
|
hPos = LEFT; vPos = BOTTOM;
|
||||||
|
} else if(cmd.equals("S")) {
|
||||||
|
hPos = CENTER; vPos = BOTTOM;
|
||||||
|
} else /*if(cmd.equals("SE"))*/ {
|
||||||
|
hPos = RIGHT; vPos = BOTTOM;
|
||||||
|
}
|
||||||
|
for(int i = 0; i < demo.getCurrentControls().size(); i++) {
|
||||||
|
Component c = (Component) demo.getCurrentControls().elementAt(i);
|
||||||
|
setPosition(c, hPos, vPos);
|
||||||
|
}
|
||||||
|
demo.invalidate();
|
||||||
|
demo.validate();
|
||||||
|
demo.repaint();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Label Alignment Listener
|
||||||
|
class LabelAlignmentListener implements ActionListener {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JRadioButton rb = (JRadioButton) e.getSource();
|
||||||
|
if(!rb.isSelected()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String cmd = rb.getActionCommand();
|
||||||
|
int hPos, vPos;
|
||||||
|
if(cmd.equals("NW")) {
|
||||||
|
hPos = LEFT; vPos = TOP;
|
||||||
|
} else if(cmd.equals("N")) {
|
||||||
|
hPos = CENTER; vPos = TOP;
|
||||||
|
} else if(cmd.equals("NE")) {
|
||||||
|
hPos = RIGHT; vPos = TOP;
|
||||||
|
} else if(cmd.equals("W")) {
|
||||||
|
hPos = LEFT; vPos = CENTER;
|
||||||
|
} else if(cmd.equals("C")) {
|
||||||
|
hPos = CENTER; vPos = CENTER;
|
||||||
|
} else if(cmd.equals("E")) {
|
||||||
|
hPos = RIGHT; vPos = CENTER;
|
||||||
|
} else if(cmd.equals("SW")) {
|
||||||
|
hPos = LEFT; vPos = BOTTOM;
|
||||||
|
} else if(cmd.equals("S")) {
|
||||||
|
hPos = CENTER; vPos = BOTTOM;
|
||||||
|
} else /*if(cmd.equals("SE"))*/ {
|
||||||
|
hPos = RIGHT; vPos = BOTTOM;
|
||||||
|
}
|
||||||
|
for(int i = 0; i < demo.getCurrentControls().size(); i++) {
|
||||||
|
Component c = (Component) demo.getCurrentControls().elementAt(i);
|
||||||
|
setAlignment(c,hPos,vPos);
|
||||||
|
c.invalidate();
|
||||||
|
}
|
||||||
|
demo.invalidate();
|
||||||
|
demo.validate();
|
||||||
|
demo.repaint();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Position
|
||||||
|
void setPosition(Component c, int hPos, int vPos) {
|
||||||
|
boolean ltr = true;
|
||||||
|
ltr = c.getComponentOrientation().isLeftToRight();
|
||||||
|
if( absolutePositions ) {
|
||||||
|
if( hPos == LEADING ) {
|
||||||
|
hPos = ltr ? LEFT : RIGHT;
|
||||||
|
} else if( hPos == TRAILING ) {
|
||||||
|
hPos = ltr ? RIGHT : LEFT;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if( hPos == LEFT ) {
|
||||||
|
hPos = ltr ? LEADING : TRAILING;
|
||||||
|
} else if( hPos == RIGHT ) {
|
||||||
|
hPos = ltr ? TRAILING : LEADING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(c instanceof AbstractButton) {
|
||||||
|
AbstractButton x = (AbstractButton) c;
|
||||||
|
x.setHorizontalTextPosition(hPos);
|
||||||
|
x.setVerticalTextPosition(vPos);
|
||||||
|
} else if(c instanceof JLabel) {
|
||||||
|
JLabel x = (JLabel) c;
|
||||||
|
x.setHorizontalTextPosition(hPos);
|
||||||
|
x.setVerticalTextPosition(vPos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setAlignment(Component c, int hPos, int vPos) {
|
||||||
|
boolean ltr = true;
|
||||||
|
ltr = c.getComponentOrientation().isLeftToRight();
|
||||||
|
if( absolutePositions ) {
|
||||||
|
if( hPos == LEADING ) {
|
||||||
|
hPos = ltr ? LEFT : RIGHT;
|
||||||
|
} else if( hPos == TRAILING ) {
|
||||||
|
hPos = ltr ? RIGHT : LEFT;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if( hPos == LEFT ) {
|
||||||
|
hPos = ltr ? LEADING : TRAILING;
|
||||||
|
} else if( hPos == RIGHT ) {
|
||||||
|
hPos = ltr ? TRAILING : LEADING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(c instanceof AbstractButton) {
|
||||||
|
AbstractButton x = (AbstractButton) c;
|
||||||
|
x.setHorizontalAlignment(hPos);
|
||||||
|
x.setVerticalAlignment(vPos);
|
||||||
|
} else if(c instanceof JLabel) {
|
||||||
|
JLabel x = (JLabel) c;
|
||||||
|
x.setHorizontalAlignment(hPos);
|
||||||
|
x.setVerticalAlignment(vPos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
379
src/demo/share/jfc/SwingSet2/ListDemo.java
Normal file
@ -0,0 +1,379 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List Demo. This demo shows that it is not
|
||||||
|
* always necessary to have an array of objects
|
||||||
|
* as big as the size of the list stored.
|
||||||
|
*
|
||||||
|
* Indeed, in this example, there is no array
|
||||||
|
* kept for the list data, rather it is generated
|
||||||
|
* on the fly as only those elements are needed.
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class ListDemo extends DemoModule {
|
||||||
|
JList list;
|
||||||
|
|
||||||
|
JPanel prefixList;
|
||||||
|
JPanel suffixList;
|
||||||
|
|
||||||
|
Action prefixAction;
|
||||||
|
Action suffixAction;
|
||||||
|
|
||||||
|
GeneratedListModel listModel;
|
||||||
|
|
||||||
|
Vector checkboxes = new Vector();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ListDemo demo = new ListDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ListDemo Constructor
|
||||||
|
*/
|
||||||
|
public ListDemo(SwingSet2 swingset) {
|
||||||
|
super(swingset, "ListDemo", "toolbar/JList.gif");
|
||||||
|
|
||||||
|
loadImages();
|
||||||
|
|
||||||
|
JLabel description = new JLabel(getString("ListDemo.description"));
|
||||||
|
getDemoPanel().add(description, BorderLayout.NORTH);
|
||||||
|
|
||||||
|
JPanel centerPanel = new JPanel();
|
||||||
|
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.X_AXIS));
|
||||||
|
centerPanel.add(Box.createRigidArea(HGAP10));
|
||||||
|
getDemoPanel().add(centerPanel, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
JPanel listPanel = new JPanel();
|
||||||
|
listPanel.setLayout(new BoxLayout(listPanel, BoxLayout.Y_AXIS));
|
||||||
|
listPanel.add(Box.createRigidArea(VGAP10));
|
||||||
|
|
||||||
|
centerPanel.add(listPanel);
|
||||||
|
centerPanel.add(Box.createRigidArea(HGAP30));
|
||||||
|
|
||||||
|
// Create the list
|
||||||
|
list = new JList();
|
||||||
|
list.setCellRenderer(new CompanyLogoListCellRenderer());
|
||||||
|
listModel = new GeneratedListModel(this);
|
||||||
|
list.setModel(listModel);
|
||||||
|
|
||||||
|
// Set the preferred row count. This affects the preferredSize
|
||||||
|
// of the JList when it's in a scrollpane.
|
||||||
|
list.setVisibleRowCount(22);
|
||||||
|
|
||||||
|
// Add list to a scrollpane
|
||||||
|
JScrollPane scrollPane = new JScrollPane(list);
|
||||||
|
listPanel.add(scrollPane);
|
||||||
|
listPanel.add(Box.createRigidArea(VGAP10));
|
||||||
|
|
||||||
|
// Add the control panel (holds the prefix/suffix list and prefix/suffix checkboxes)
|
||||||
|
centerPanel.add(createControlPanel());
|
||||||
|
|
||||||
|
// create prefixes and suffixes
|
||||||
|
addPrefix("Tera", true);
|
||||||
|
addPrefix("Micro", false);
|
||||||
|
addPrefix("Southern", false);
|
||||||
|
addPrefix("Net", true);
|
||||||
|
addPrefix("YoYo", true);
|
||||||
|
addPrefix("Northern", false);
|
||||||
|
addPrefix("Tele", false);
|
||||||
|
addPrefix("Eastern", false);
|
||||||
|
addPrefix("Neo", false);
|
||||||
|
addPrefix("Digi", false);
|
||||||
|
addPrefix("National", false);
|
||||||
|
addPrefix("Compu", true);
|
||||||
|
addPrefix("Meta", true);
|
||||||
|
addPrefix("Info", false);
|
||||||
|
addPrefix("Western", false);
|
||||||
|
addPrefix("Data", false);
|
||||||
|
addPrefix("Atlantic", false);
|
||||||
|
addPrefix("Advanced", false);
|
||||||
|
addPrefix("Euro", false);
|
||||||
|
addPrefix("Pacific", false);
|
||||||
|
addPrefix("Mobile", false);
|
||||||
|
addPrefix("In", false);
|
||||||
|
addPrefix("Computa", false);
|
||||||
|
addPrefix("Digital", false);
|
||||||
|
addPrefix("Analog", false);
|
||||||
|
|
||||||
|
addSuffix("Tech", true);
|
||||||
|
addSuffix("Soft", true);
|
||||||
|
addSuffix("Telecom", true);
|
||||||
|
addSuffix("Solutions", false);
|
||||||
|
addSuffix("Works", true);
|
||||||
|
addSuffix("Dyne", false);
|
||||||
|
addSuffix("Services", false);
|
||||||
|
addSuffix("Vers", false);
|
||||||
|
addSuffix("Devices", false);
|
||||||
|
addSuffix("Software", false);
|
||||||
|
addSuffix("Serv", false);
|
||||||
|
addSuffix("Systems", true);
|
||||||
|
addSuffix("Dynamics", true);
|
||||||
|
addSuffix("Net", false);
|
||||||
|
addSuffix("Sys", false);
|
||||||
|
addSuffix("Computing", false);
|
||||||
|
addSuffix("Scape", false);
|
||||||
|
addSuffix("Com", false);
|
||||||
|
addSuffix("Ware", false);
|
||||||
|
addSuffix("Widgets", false);
|
||||||
|
addSuffix("Media", false);
|
||||||
|
addSuffix("Computer", false);
|
||||||
|
addSuffix("Hardware", false);
|
||||||
|
addSuffix("Gizmos", false);
|
||||||
|
addSuffix("Concepts", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateDragEnabled(boolean dragEnabled) {
|
||||||
|
list.setDragEnabled(dragEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JPanel createControlPanel() {
|
||||||
|
JPanel controlPanel = new JPanel() {
|
||||||
|
Insets insets = new Insets(0, 4, 10, 10);
|
||||||
|
public Insets getInsets() {
|
||||||
|
return insets;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
controlPanel.setLayout(new BoxLayout(controlPanel, BoxLayout.X_AXIS));
|
||||||
|
|
||||||
|
JPanel prefixPanel = new JPanel();
|
||||||
|
prefixPanel.setLayout(new BoxLayout(prefixPanel, BoxLayout.Y_AXIS));
|
||||||
|
prefixPanel.add(new JLabel(getString("ListDemo.prefixes")));
|
||||||
|
|
||||||
|
JPanel suffixPanel = new JPanel();
|
||||||
|
suffixPanel.setLayout(new BoxLayout(suffixPanel, BoxLayout.Y_AXIS));
|
||||||
|
suffixPanel.add(new JLabel(getString("ListDemo.suffixes")));
|
||||||
|
|
||||||
|
prefixList = new JPanel() {
|
||||||
|
Insets insets = new Insets(0, 4, 0, 0);
|
||||||
|
public Insets getInsets() {
|
||||||
|
return insets;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
prefixList.setLayout(new BoxLayout(prefixList, BoxLayout.Y_AXIS));
|
||||||
|
JScrollPane scrollPane = new JScrollPane(prefixList);
|
||||||
|
scrollPane.getVerticalScrollBar().setUnitIncrement(10);
|
||||||
|
prefixPanel.add(scrollPane);
|
||||||
|
prefixPanel.add(Box.createRigidArea(HGAP10));
|
||||||
|
|
||||||
|
suffixList = new JPanel() {
|
||||||
|
Insets insets = new Insets(0, 4, 0, 0);
|
||||||
|
public Insets getInsets() {
|
||||||
|
return insets;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
suffixList.setLayout(new BoxLayout(suffixList, BoxLayout.Y_AXIS));
|
||||||
|
scrollPane = new JScrollPane(suffixList);
|
||||||
|
scrollPane.getVerticalScrollBar().setUnitIncrement(10);
|
||||||
|
suffixPanel.add(scrollPane);
|
||||||
|
suffixPanel.add(Box.createRigidArea(HGAP10));
|
||||||
|
|
||||||
|
controlPanel.add(prefixPanel);
|
||||||
|
controlPanel.add(Box.createRigidArea(HGAP15));
|
||||||
|
controlPanel.add(suffixPanel);
|
||||||
|
return controlPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private FocusListener listFocusListener = new FocusAdapter() {
|
||||||
|
public void focusGained(FocusEvent e) {
|
||||||
|
JComponent c = (JComponent)e.getComponent();
|
||||||
|
c.scrollRectToVisible(new Rectangle(0, 0, c.getWidth(), c.getHeight()));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public void addPrefix(String prefix, boolean selected) {
|
||||||
|
if(prefixAction == null) {
|
||||||
|
prefixAction = new UpdatePrefixListAction(listModel);
|
||||||
|
}
|
||||||
|
final JCheckBox cb = (JCheckBox) prefixList.add(new JCheckBox(prefix));
|
||||||
|
checkboxes.addElement(cb);
|
||||||
|
cb.setSelected(selected);
|
||||||
|
cb.addActionListener(prefixAction);
|
||||||
|
if(selected) {
|
||||||
|
listModel.addPrefix(prefix);
|
||||||
|
}
|
||||||
|
cb.addFocusListener(listFocusListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addSuffix(String suffix, boolean selected) {
|
||||||
|
if(suffixAction == null) {
|
||||||
|
suffixAction = new UpdateSuffixListAction(listModel);
|
||||||
|
}
|
||||||
|
final JCheckBox cb = (JCheckBox) suffixList.add(new JCheckBox(suffix));
|
||||||
|
checkboxes.addElement(cb);
|
||||||
|
cb.setSelected(selected);
|
||||||
|
cb.addActionListener(suffixAction);
|
||||||
|
if(selected) {
|
||||||
|
listModel.addSuffix(suffix);
|
||||||
|
}
|
||||||
|
cb.addFocusListener(listFocusListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
class UpdatePrefixListAction extends AbstractAction {
|
||||||
|
GeneratedListModel listModel;
|
||||||
|
protected UpdatePrefixListAction(GeneratedListModel listModel) {
|
||||||
|
this.listModel = listModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JCheckBox cb = (JCheckBox) e.getSource();
|
||||||
|
if(cb.isSelected()) {
|
||||||
|
listModel.addPrefix(cb.getText());
|
||||||
|
} else {
|
||||||
|
listModel.removePrefix(cb.getText());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class UpdateSuffixListAction extends AbstractAction {
|
||||||
|
GeneratedListModel listModel;
|
||||||
|
protected UpdateSuffixListAction(GeneratedListModel listModel) {
|
||||||
|
this.listModel = listModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JCheckBox cb = (JCheckBox) e.getSource();
|
||||||
|
if(cb.isSelected()) {
|
||||||
|
listModel.addSuffix(cb.getText());
|
||||||
|
} else {
|
||||||
|
listModel.removeSuffix(cb.getText());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class GeneratedListModel extends AbstractListModel {
|
||||||
|
ListDemo demo;
|
||||||
|
Permuter permuter;
|
||||||
|
|
||||||
|
public Vector prefix = new Vector();
|
||||||
|
public Vector suffix = new Vector();
|
||||||
|
|
||||||
|
public GeneratedListModel (ListDemo demo) {
|
||||||
|
this.demo = demo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void update() {
|
||||||
|
permuter = new Permuter(getSize());
|
||||||
|
fireContentsChanged(this, 0, getSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPrefix(String s) {
|
||||||
|
if(!prefix.contains(s)) {
|
||||||
|
prefix.addElement(s);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePrefix(String s) {
|
||||||
|
prefix.removeElement(s);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addSuffix(String s) {
|
||||||
|
if(!suffix.contains(s)) {
|
||||||
|
suffix.addElement(s);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeSuffix(String s) {
|
||||||
|
suffix.removeElement(s);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSize() {
|
||||||
|
return prefix.size() * suffix.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getElementAt(int index) {
|
||||||
|
if(permuter == null) {
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
// morph the index to another int -- this has the benefit of
|
||||||
|
// causing the list to look random.
|
||||||
|
int j = permuter.map(index);
|
||||||
|
int ps = prefix.size();
|
||||||
|
int ss = suffix.size();
|
||||||
|
return (String) prefix.elementAt(j%ps) + (String) suffix.elementAt((j/ps)%ss);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageIcon images[] = new ImageIcon[7];
|
||||||
|
void loadImages() {
|
||||||
|
images[0] = createImageIcon("list/red.gif", getString("ListDemo.red"));
|
||||||
|
images[1] = createImageIcon("list/blue.gif", getString("ListDemo.blue"));
|
||||||
|
images[2] = createImageIcon("list/yellow.gif", getString("ListDemo.yellow"));
|
||||||
|
images[3] = createImageIcon("list/green.gif", getString("ListDemo.green"));
|
||||||
|
images[4] = createImageIcon("list/gray.gif", getString("ListDemo.gray"));
|
||||||
|
images[5] = createImageIcon("list/cyan.gif", getString("ListDemo.cyan"));
|
||||||
|
images[6] = createImageIcon("list/magenta.gif", getString("ListDemo.magenta"));
|
||||||
|
}
|
||||||
|
|
||||||
|
class CompanyLogoListCellRenderer extends DefaultListCellRenderer {
|
||||||
|
public Component getListCellRendererComponent(
|
||||||
|
JList list,
|
||||||
|
Object value,
|
||||||
|
int index,
|
||||||
|
boolean isSelected,
|
||||||
|
boolean cellHasFocus)
|
||||||
|
{
|
||||||
|
Component retValue = super.getListCellRendererComponent(
|
||||||
|
list, value, index, isSelected, cellHasFocus
|
||||||
|
);
|
||||||
|
setIcon(images[index%7]);
|
||||||
|
return retValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
231
src/demo/share/jfc/SwingSet2/OptionPaneDemo.java
Normal file
@ -0,0 +1,231 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JOptionPaneDemo
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class OptionPaneDemo extends DemoModule {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
OptionPaneDemo demo = new OptionPaneDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OptionPaneDemo Constructor
|
||||||
|
*/
|
||||||
|
public OptionPaneDemo(SwingSet2 swingset) {
|
||||||
|
// Set the title for this demo, and an icon used to represent this
|
||||||
|
// demo inside the SwingSet2 app.
|
||||||
|
super(swingset, "OptionPaneDemo", "toolbar/JOptionPane.gif");
|
||||||
|
|
||||||
|
JPanel demo = getDemoPanel();
|
||||||
|
|
||||||
|
demo.setLayout(new BoxLayout(demo, BoxLayout.X_AXIS));
|
||||||
|
|
||||||
|
JPanel bp = new JPanel() {
|
||||||
|
public Dimension getMaximumSize() {
|
||||||
|
return new Dimension(getPreferredSize().width, super.getMaximumSize().height);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
bp.setLayout(new BoxLayout(bp, BoxLayout.Y_AXIS));
|
||||||
|
|
||||||
|
bp.add(Box.createRigidArea(VGAP30));
|
||||||
|
bp.add(Box.createRigidArea(VGAP30));
|
||||||
|
|
||||||
|
bp.add(createInputDialogButton()); bp.add(Box.createRigidArea(VGAP15));
|
||||||
|
bp.add(createWarningDialogButton()); bp.add(Box.createRigidArea(VGAP15));
|
||||||
|
bp.add(createMessageDialogButton()); bp.add(Box.createRigidArea(VGAP15));
|
||||||
|
bp.add(createComponentDialogButton()); bp.add(Box.createRigidArea(VGAP15));
|
||||||
|
bp.add(createConfirmDialogButton()); bp.add(Box.createVerticalGlue());
|
||||||
|
|
||||||
|
demo.add(Box.createHorizontalGlue());
|
||||||
|
demo.add(bp);
|
||||||
|
demo.add(Box.createHorizontalGlue());
|
||||||
|
}
|
||||||
|
|
||||||
|
public JButton createWarningDialogButton() {
|
||||||
|
Action a = new AbstractAction(getString("OptionPaneDemo.warningbutton")) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JOptionPane.showMessageDialog(
|
||||||
|
getDemoPanel(),
|
||||||
|
getString("OptionPaneDemo.warningtext"),
|
||||||
|
getString("OptionPaneDemo.warningtitle"),
|
||||||
|
JOptionPane.WARNING_MESSAGE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return createButton(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JButton createMessageDialogButton() {
|
||||||
|
Action a = new AbstractAction(getString("OptionPaneDemo.messagebutton")) {
|
||||||
|
URL img = getClass().getResource("/resources/images/optionpane/bottle.gif");
|
||||||
|
String imagesrc = "<img src=\"" + img + "\" width=\"284\" height=\"100\">";
|
||||||
|
String message = getString("OptionPaneDemo.messagetext");
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JOptionPane.showMessageDialog(
|
||||||
|
getDemoPanel(),
|
||||||
|
"<html>" + imagesrc + "<br><center>" + message + "</center><br></html>"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return createButton(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JButton createConfirmDialogButton() {
|
||||||
|
Action a = new AbstractAction(getString("OptionPaneDemo.confirmbutton")) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
int result = JOptionPane.showConfirmDialog(getDemoPanel(), getString("OptionPaneDemo.confirmquestion"));
|
||||||
|
if(result == JOptionPane.YES_OPTION) {
|
||||||
|
JOptionPane.showMessageDialog(getDemoPanel(), getString("OptionPaneDemo.confirmyes"));
|
||||||
|
} else if(result == JOptionPane.NO_OPTION) {
|
||||||
|
JOptionPane.showMessageDialog(getDemoPanel(), getString("OptionPaneDemo.confirmno"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return createButton(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JButton createInputDialogButton() {
|
||||||
|
Action a = new AbstractAction(getString("OptionPaneDemo.inputbutton")) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
String result = JOptionPane.showInputDialog(getDemoPanel(), getString("OptionPaneDemo.inputquestion"));
|
||||||
|
if ((result != null) && (result.length() > 0)) {
|
||||||
|
JOptionPane.showMessageDialog(getDemoPanel(),
|
||||||
|
result + ": " +
|
||||||
|
getString("OptionPaneDemo.inputresponse"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return createButton(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JButton createComponentDialogButton() {
|
||||||
|
Action a = new AbstractAction(getString("OptionPaneDemo.componentbutton")) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
// In a ComponentDialog, you can show as many message components and
|
||||||
|
// as many options as you want:
|
||||||
|
|
||||||
|
// Messages
|
||||||
|
Object[] message = new Object[4];
|
||||||
|
message[0] = getString("OptionPaneDemo.componentmessage");
|
||||||
|
message[1] = new JTextField(getString("OptionPaneDemo.componenttextfield"));
|
||||||
|
|
||||||
|
JComboBox cb = new JComboBox();
|
||||||
|
cb.addItem(getString("OptionPaneDemo.component_cb1"));
|
||||||
|
cb.addItem(getString("OptionPaneDemo.component_cb2"));
|
||||||
|
cb.addItem(getString("OptionPaneDemo.component_cb3"));
|
||||||
|
message[2] = cb;
|
||||||
|
|
||||||
|
message[3] = getString("OptionPaneDemo.componentmessage2");
|
||||||
|
|
||||||
|
// Options
|
||||||
|
String[] options = {
|
||||||
|
getString("OptionPaneDemo.component_op1"),
|
||||||
|
getString("OptionPaneDemo.component_op2"),
|
||||||
|
getString("OptionPaneDemo.component_op3"),
|
||||||
|
getString("OptionPaneDemo.component_op4"),
|
||||||
|
getString("OptionPaneDemo.component_op5")
|
||||||
|
};
|
||||||
|
int result = JOptionPane.showOptionDialog(
|
||||||
|
getDemoPanel(), // the parent that the dialog blocks
|
||||||
|
message, // the dialog message array
|
||||||
|
getString("OptionPaneDemo.componenttitle"), // the title of the dialog window
|
||||||
|
JOptionPane.DEFAULT_OPTION, // option type
|
||||||
|
JOptionPane.INFORMATION_MESSAGE, // message type
|
||||||
|
null, // optional icon, use null to use the default icon
|
||||||
|
options, // options string array, will be made into buttons
|
||||||
|
options[3] // option that should be made into a default button
|
||||||
|
);
|
||||||
|
switch(result) {
|
||||||
|
case 0: // yes
|
||||||
|
JOptionPane.showMessageDialog(getDemoPanel(), getString("OptionPaneDemo.component_r1"));
|
||||||
|
break;
|
||||||
|
case 1: // no
|
||||||
|
JOptionPane.showMessageDialog(getDemoPanel(), getString("OptionPaneDemo.component_r2"));
|
||||||
|
break;
|
||||||
|
case 2: // maybe
|
||||||
|
JOptionPane.showMessageDialog(getDemoPanel(), getString("OptionPaneDemo.component_r3"));
|
||||||
|
break;
|
||||||
|
case 3: // probably
|
||||||
|
JOptionPane.showMessageDialog(getDemoPanel(), getString("OptionPaneDemo.component_r4"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return createButton(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JButton createButton(Action a) {
|
||||||
|
JButton b = new JButton() {
|
||||||
|
public Dimension getMaximumSize() {
|
||||||
|
int width = Short.MAX_VALUE;
|
||||||
|
int height = super.getMaximumSize().height;
|
||||||
|
return new Dimension(width, height);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// setting the following client property informs the button to show
|
||||||
|
// the action text as it's name. The default is to not show the
|
||||||
|
// action text.
|
||||||
|
b.putClientProperty("displayActionText", Boolean.TRUE);
|
||||||
|
b.setAction(a);
|
||||||
|
// b.setAlignmentX(JButton.CENTER_ALIGNMENT);
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
110
src/demo/share/jfc/SwingSet2/Permuter.java
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An object that implements a cheesy pseudorandom permutation of the integers
|
||||||
|
* from zero to some user-specified value. (The permutation is a linear
|
||||||
|
* function.)
|
||||||
|
*
|
||||||
|
* @author Josh Bloch
|
||||||
|
*/
|
||||||
|
class Permuter {
|
||||||
|
/**
|
||||||
|
* The size of the permutation.
|
||||||
|
*/
|
||||||
|
private int modulus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nonnegative integer less than n that is relatively prime to m.
|
||||||
|
*/
|
||||||
|
private int multiplier;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pseudorandom nonnegative integer less than n.
|
||||||
|
*/
|
||||||
|
private int addend = 22;
|
||||||
|
|
||||||
|
public Permuter(int n) {
|
||||||
|
if (n<0) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
modulus = n;
|
||||||
|
if (n==1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize the multiplier and offset
|
||||||
|
multiplier = (int) Math.sqrt(n);
|
||||||
|
while (gcd(multiplier, n) != 1) {
|
||||||
|
if (++multiplier == n) {
|
||||||
|
multiplier = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the integer to which this permuter maps the specified integer.
|
||||||
|
* The specified integer must be between 0 and n-1, and the returned
|
||||||
|
* integer will be as well.
|
||||||
|
*/
|
||||||
|
public int map(int i) {
|
||||||
|
return (multiplier * i + addend) % modulus;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate GCD of a and b, which are assumed to be non-negative.
|
||||||
|
*/
|
||||||
|
private static int gcd(int a, int b) {
|
||||||
|
while(b != 0) {
|
||||||
|
int tmp = a % b;
|
||||||
|
a = b;
|
||||||
|
b = tmp;
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple test. Takes modulus on command line and prints out permutation.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
int modulus = Integer.parseInt(args[0]);
|
||||||
|
Permuter p = new Permuter(modulus);
|
||||||
|
for (int i=0; i<modulus; i++) {
|
||||||
|
System.out.print(p.map(i)+" ");
|
||||||
|
}
|
||||||
|
System.out.println();
|
||||||
|
}
|
||||||
|
}
|
190
src/demo/share/jfc/SwingSet2/ProgressBarDemo.java
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JProgressBar Demo
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
# @author Peter Korn (accessibility support)
|
||||||
|
*/
|
||||||
|
public class ProgressBarDemo extends DemoModule {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ProgressBarDemo demo = new ProgressBarDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ProgressBarDemo Constructor
|
||||||
|
*/
|
||||||
|
public ProgressBarDemo(SwingSet2 swingset) {
|
||||||
|
// Set the title for this demo, and an icon used to represent this
|
||||||
|
// demo inside the SwingSet2 app.
|
||||||
|
super(swingset, "ProgressBarDemo", "toolbar/JProgressBar.gif");
|
||||||
|
|
||||||
|
createProgressPanel();
|
||||||
|
}
|
||||||
|
|
||||||
|
javax.swing.Timer timer = new javax.swing.Timer(18, createTextLoadAction());
|
||||||
|
Action loadAction;
|
||||||
|
Action stopAction;
|
||||||
|
JProgressBar progressBar;
|
||||||
|
JTextArea progressTextArea;
|
||||||
|
|
||||||
|
void updateDragEnabled(boolean dragEnabled) {
|
||||||
|
progressTextArea.setDragEnabled(dragEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createProgressPanel() {
|
||||||
|
getDemoPanel().setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
JPanel textWrapper = new JPanel(new BorderLayout());
|
||||||
|
textWrapper.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
|
||||||
|
textWrapper.setAlignmentX(LEFT_ALIGNMENT);
|
||||||
|
progressTextArea = new MyTextArea();
|
||||||
|
|
||||||
|
progressTextArea.getAccessibleContext().setAccessibleName(getString("ProgressBarDemo.accessible_text_area_name"));
|
||||||
|
progressTextArea.getAccessibleContext().setAccessibleName(getString("ProgressBarDemo.accessible_text_area_description"));
|
||||||
|
textWrapper.add(new JScrollPane(progressTextArea), BorderLayout.CENTER);
|
||||||
|
|
||||||
|
getDemoPanel().add(textWrapper, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
JPanel progressPanel = new JPanel();
|
||||||
|
getDemoPanel().add(progressPanel, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
progressBar = new JProgressBar(JProgressBar.HORIZONTAL, 0, text.length()) {
|
||||||
|
public Dimension getPreferredSize() {
|
||||||
|
return new Dimension(300, super.getPreferredSize().height);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
progressBar.getAccessibleContext().setAccessibleName(getString("ProgressBarDemo.accessible_text_loading_progress"));
|
||||||
|
|
||||||
|
progressPanel.add(progressBar);
|
||||||
|
progressPanel.add(createLoadButton());
|
||||||
|
progressPanel.add(createStopButton());
|
||||||
|
}
|
||||||
|
|
||||||
|
public JButton createLoadButton() {
|
||||||
|
loadAction = new AbstractAction(getString("ProgressBarDemo.start_button")) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
loadAction.setEnabled(false);
|
||||||
|
stopAction.setEnabled(true);
|
||||||
|
if (progressBar.getValue() == progressBar.getMaximum()) {
|
||||||
|
progressBar.setValue(0);
|
||||||
|
textLocation = 0;
|
||||||
|
progressTextArea.setText("");
|
||||||
|
}
|
||||||
|
timer.start();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return createButton(loadAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JButton createStopButton() {
|
||||||
|
stopAction = new AbstractAction(getString("ProgressBarDemo.stop_button")) {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
timer.stop();
|
||||||
|
loadAction.setEnabled(true);
|
||||||
|
stopAction.setEnabled(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return createButton(stopAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JButton createButton(Action a) {
|
||||||
|
JButton b = new JButton();
|
||||||
|
// setting the following client property informs the button to show
|
||||||
|
// the action text as it's name. The default is to not show the
|
||||||
|
// action text.
|
||||||
|
b.putClientProperty("displayActionText", Boolean.TRUE);
|
||||||
|
b.setAction(a);
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int textLocation = 0;
|
||||||
|
|
||||||
|
String text = getString("ProgressBarDemo.text");
|
||||||
|
|
||||||
|
public Action createTextLoadAction() {
|
||||||
|
return new AbstractAction("text load action") {
|
||||||
|
public void actionPerformed (ActionEvent e) {
|
||||||
|
if(progressBar.getValue() < progressBar.getMaximum()) {
|
||||||
|
progressBar.setValue(progressBar.getValue() + 1);
|
||||||
|
progressTextArea.append(text.substring(textLocation, textLocation+1));
|
||||||
|
textLocation++;
|
||||||
|
} else {
|
||||||
|
timer.stop();
|
||||||
|
loadAction.setEnabled(true);
|
||||||
|
stopAction.setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class MyTextArea extends JTextArea {
|
||||||
|
public MyTextArea() {
|
||||||
|
super(null, 0, 0);
|
||||||
|
setEditable(false);
|
||||||
|
setText("");
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getAlignmentX () {
|
||||||
|
return LEFT_ALIGNMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getAlignmentY () {
|
||||||
|
return TOP_ALIGNMENT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
47
src/demo/share/jfc/SwingSet2/README.txt
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
SwingSet2 demonstrates some of the abilities of the Swing User Interface
|
||||||
|
Toolkit by displaying many of the components in a single showcase application.
|
||||||
|
Use it to try out different components and features provided by Swing.
|
||||||
|
|
||||||
|
|
||||||
|
==================================
|
||||||
|
TO RUN SWINGSET2 AS AN APPLICATION
|
||||||
|
==================================
|
||||||
|
|
||||||
|
java -jar SwingSet2.jar
|
||||||
|
|
||||||
|
|
||||||
|
=============================
|
||||||
|
TO RUN SWINGSET2 AS AN APPLET
|
||||||
|
=============================
|
||||||
|
|
||||||
|
appletviewer SwingSet2.html
|
||||||
|
|
||||||
|
=========================
|
||||||
|
TO MODIFY/BUILD SWINGSET2
|
||||||
|
=========================
|
||||||
|
|
||||||
|
The full source for the SwingSet2 demo can be found in the "src"
|
||||||
|
subdirectory. If you wish to play with the source code and try
|
||||||
|
out your changes, you can compile and run in this "src" directory:
|
||||||
|
|
||||||
|
javac *.java
|
||||||
|
|
||||||
|
java SwingSet2
|
||||||
|
|
||||||
|
You may notice a difference when running SwingSet from your compiled source
|
||||||
|
(versus running from the packaged JAR file), in that it won't show the
|
||||||
|
splash screen. This is expected, as the splash screen is shown using the
|
||||||
|
java.awt.SplashScreen support, which allows specifying a splash screen
|
||||||
|
image as an attribute in the JAR's manifest file. If you'd like to see the
|
||||||
|
splash screen with your own compiled version, you can package your classes
|
||||||
|
into a JAR and specify the splash screen (as outlined in the java.awt.SplashScreen
|
||||||
|
documentation) or you can specify the splash screen image on the command line:
|
||||||
|
|
||||||
|
java -splash:resources/images/splash.png SwingSet2
|
||||||
|
|
||||||
|
|
||||||
|
Note: These instructions assume that this installation's versions of the java,
|
||||||
|
appletviewer, and javac commands are in your path. If they aren't, then you should
|
||||||
|
either specify the complete path to the commands or update your PATH environment
|
||||||
|
variable as described in the installation instructions for the
|
||||||
|
Java(TM) SE Development Kit.
|
56
src/demo/share/jfc/SwingSet2/RubyTheme.java
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import javax.swing.plaf.*;
|
||||||
|
import javax.swing.plaf.metal.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class describes a theme using red colors.
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class RubyTheme extends DefaultMetalTheme {
|
||||||
|
|
||||||
|
public String getName() { return "Ruby"; }
|
||||||
|
|
||||||
|
private final ColorUIResource primary1 = new ColorUIResource(80, 10, 22);
|
||||||
|
private final ColorUIResource primary2 = new ColorUIResource(193, 10, 44);
|
||||||
|
private final ColorUIResource primary3 = new ColorUIResource(244, 10, 66);
|
||||||
|
|
||||||
|
protected ColorUIResource getPrimary1() { return primary1; }
|
||||||
|
protected ColorUIResource getPrimary2() { return primary2; }
|
||||||
|
protected ColorUIResource getPrimary3() { return primary3; }
|
||||||
|
|
||||||
|
}
|
122
src/demo/share/jfc/SwingSet2/ScrollPaneDemo.java
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scroll Pane Demo
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class ScrollPaneDemo extends DemoModule {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ScrollPaneDemo demo = new ScrollPaneDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ScrollPaneDemo Constructor
|
||||||
|
*/
|
||||||
|
public ScrollPaneDemo(SwingSet2 swingset) {
|
||||||
|
super(swingset, "ScrollPaneDemo", "toolbar/JScrollPane.gif");
|
||||||
|
|
||||||
|
ImageIcon crayons = createImageIcon("scrollpane/crayons.jpg", getString("ScrollPaneDemo.crayons"));
|
||||||
|
getDemoPanel().add(new ImageScroller(this, crayons), BorderLayout.CENTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ScrollPane class that demonstrates how to set the various column and row headers
|
||||||
|
* and corners.
|
||||||
|
*/
|
||||||
|
class ImageScroller extends JScrollPane {
|
||||||
|
public ImageScroller(ScrollPaneDemo demo, Icon icon) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
// Panel to hold the icon image
|
||||||
|
JPanel p = new JPanel(new BorderLayout());
|
||||||
|
p.add(new JLabel(icon), BorderLayout.CENTER);
|
||||||
|
getViewport().add(p);
|
||||||
|
|
||||||
|
// Create and add a column header to the scrollpane
|
||||||
|
JLabel colHeader = new JLabel(
|
||||||
|
demo.createImageIcon("scrollpane/colheader.jpg", getString("ScrollPaneDemo.colheader")));
|
||||||
|
setColumnHeaderView(colHeader);
|
||||||
|
|
||||||
|
// Create and add a row header to the scrollpane
|
||||||
|
JLabel rowHeader = new JLabel(
|
||||||
|
demo.createImageIcon("scrollpane/rowheader.jpg", getString("ScrollPaneDemo.rowheader")));
|
||||||
|
setRowHeaderView(rowHeader);
|
||||||
|
|
||||||
|
// Create and add the upper left corner
|
||||||
|
JLabel cornerUL = new JLabel(
|
||||||
|
demo.createImageIcon("scrollpane/upperleft.jpg", getString("ScrollPaneDemo.upperleft")));
|
||||||
|
setCorner(UPPER_LEFT_CORNER, cornerUL);
|
||||||
|
|
||||||
|
// Create and add the upper right corner
|
||||||
|
JLabel cornerUR = new JLabel(
|
||||||
|
demo.createImageIcon("scrollpane/upperright.jpg", getString("ScrollPaneDemo.upperright")));
|
||||||
|
setCorner(UPPER_RIGHT_CORNER, cornerUR);
|
||||||
|
|
||||||
|
// Create and add the lower left corner
|
||||||
|
JLabel cornerLL = new JLabel(
|
||||||
|
demo.createImageIcon("scrollpane/lowerleft.jpg", getString("ScrollPaneDemo.lowerleft")));
|
||||||
|
setCorner(LOWER_LEFT_CORNER, cornerLL);
|
||||||
|
|
||||||
|
JScrollBar vsb = getVerticalScrollBar();
|
||||||
|
JScrollBar hsb = getHorizontalScrollBar();
|
||||||
|
|
||||||
|
vsb.setValue(icon.getIconHeight());
|
||||||
|
hsb.setValue(icon.getIconWidth()/10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
284
src/demo/share/jfc/SwingSet2/SliderDemo.java
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JSlider Demo
|
||||||
|
*
|
||||||
|
* @author Dave Kloba
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class SliderDemo extends DemoModule {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SliderDemo demo = new SliderDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SliderDemo Constructor
|
||||||
|
*/
|
||||||
|
public SliderDemo(SwingSet2 swingset) {
|
||||||
|
// Set the title for this demo, and an icon used to represent this
|
||||||
|
// demo inside the SwingSet2 app.
|
||||||
|
super(swingset, "SliderDemo", "toolbar/JSlider.gif");
|
||||||
|
|
||||||
|
createSliderDemo();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createSliderDemo() {
|
||||||
|
JSlider s;
|
||||||
|
JPanel hp;
|
||||||
|
JPanel vp;
|
||||||
|
GridLayout g;
|
||||||
|
JPanel tp;
|
||||||
|
JLabel tf;
|
||||||
|
ChangeListener listener;
|
||||||
|
|
||||||
|
getDemoPanel().setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
tf = new JLabel(getString("SliderDemo.slidervalue"));
|
||||||
|
getDemoPanel().add(tf, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
tp = new JPanel();
|
||||||
|
g = new GridLayout(1, 2);
|
||||||
|
g.setHgap(5);
|
||||||
|
g.setVgap(5);
|
||||||
|
tp.setLayout(g);
|
||||||
|
getDemoPanel().add(tp, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
listener = new SliderListener(tf);
|
||||||
|
|
||||||
|
BevelBorder border = new BevelBorder(BevelBorder.LOWERED);
|
||||||
|
|
||||||
|
hp = new JPanel();
|
||||||
|
hp.setLayout(new BoxLayout(hp, BoxLayout.Y_AXIS));
|
||||||
|
hp.setBorder(new TitledBorder(
|
||||||
|
border,
|
||||||
|
getString("SliderDemo.horizontal"),
|
||||||
|
TitledBorder.LEFT,
|
||||||
|
TitledBorder.ABOVE_TOP));
|
||||||
|
tp.add(hp);
|
||||||
|
|
||||||
|
vp = new JPanel();
|
||||||
|
vp.setLayout(new BoxLayout(vp, BoxLayout.X_AXIS));
|
||||||
|
vp.setBorder(new TitledBorder(
|
||||||
|
border,
|
||||||
|
getString("SliderDemo.vertical"),
|
||||||
|
TitledBorder.LEFT,
|
||||||
|
TitledBorder.ABOVE_TOP));
|
||||||
|
tp.add(vp);
|
||||||
|
|
||||||
|
// Horizontal Slider 1
|
||||||
|
JPanel p = new JPanel();
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
|
||||||
|
p.setBorder(new TitledBorder(getString("SliderDemo.plain")));
|
||||||
|
s = new JSlider(-10, 100, 20);
|
||||||
|
s.getAccessibleContext().setAccessibleName(getString("SliderDemo.plain"));
|
||||||
|
s.getAccessibleContext().setAccessibleDescription(getString("SliderDemo.a_plain_slider"));
|
||||||
|
s.addChangeListener(listener);
|
||||||
|
|
||||||
|
p.add(Box.createRigidArea(VGAP5));
|
||||||
|
p.add(s);
|
||||||
|
p.add(Box.createRigidArea(VGAP5));
|
||||||
|
hp.add(p);
|
||||||
|
hp.add(Box.createRigidArea(VGAP10));
|
||||||
|
|
||||||
|
// Horizontal Slider 2
|
||||||
|
p = new JPanel();
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
|
||||||
|
p.setBorder(new TitledBorder(getString("SliderDemo.majorticks")));
|
||||||
|
s = new JSlider(100, 1000, 400);
|
||||||
|
s.setPaintTicks(true);
|
||||||
|
s.setMajorTickSpacing(100);
|
||||||
|
s.getAccessibleContext().setAccessibleName(getString("SliderDemo.majorticks"));
|
||||||
|
s.getAccessibleContext().setAccessibleDescription(getString("SliderDemo.majorticksdescription"));
|
||||||
|
s.addChangeListener(listener);
|
||||||
|
|
||||||
|
p.add(Box.createRigidArea(VGAP5));
|
||||||
|
p.add(s);
|
||||||
|
p.add(Box.createRigidArea(VGAP5));
|
||||||
|
hp.add(p);
|
||||||
|
hp.add(Box.createRigidArea(VGAP10));
|
||||||
|
|
||||||
|
// Horizontal Slider 3
|
||||||
|
p = new JPanel();
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
|
||||||
|
p.setBorder(new TitledBorder(getString("SliderDemo.ticks")));
|
||||||
|
s = new JSlider(0, 11, 6);
|
||||||
|
|
||||||
|
s.putClientProperty("JSlider.isFilled", Boolean.TRUE );
|
||||||
|
|
||||||
|
s.setPaintTicks(true);
|
||||||
|
s.setMajorTickSpacing(5);
|
||||||
|
s.setMinorTickSpacing(1);
|
||||||
|
|
||||||
|
s.setPaintLabels( true );
|
||||||
|
s.setSnapToTicks( true );
|
||||||
|
|
||||||
|
s.getLabelTable().put(new Integer(11), new JLabel(new Integer(11).toString(), JLabel.CENTER));
|
||||||
|
s.setLabelTable( s.getLabelTable() );
|
||||||
|
|
||||||
|
s.getAccessibleContext().setAccessibleName(getString("SliderDemo.minorticks"));
|
||||||
|
s.getAccessibleContext().setAccessibleDescription(getString("SliderDemo.minorticksdescription"));
|
||||||
|
|
||||||
|
s.addChangeListener(listener);
|
||||||
|
|
||||||
|
p.add(Box.createRigidArea(VGAP5));
|
||||||
|
p.add(s);
|
||||||
|
p.add(Box.createRigidArea(VGAP5));
|
||||||
|
hp.add(p);
|
||||||
|
hp.add(Box.createRigidArea(VGAP10));
|
||||||
|
|
||||||
|
// Horizontal Slider 4
|
||||||
|
p = new JPanel();
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
|
||||||
|
p.setBorder(new TitledBorder(getString("SliderDemo.disabled")));
|
||||||
|
BoundedRangeModel brm = new DefaultBoundedRangeModel(80, 0, 0, 100);
|
||||||
|
s = new JSlider(brm);
|
||||||
|
s.setPaintTicks(true);
|
||||||
|
s.setMajorTickSpacing(20);
|
||||||
|
s.setMinorTickSpacing(5);
|
||||||
|
s.setEnabled(false);
|
||||||
|
s.getAccessibleContext().setAccessibleName(getString("SliderDemo.disabled"));
|
||||||
|
s.getAccessibleContext().setAccessibleDescription(getString("SliderDemo.disableddescription"));
|
||||||
|
s.addChangeListener(listener);
|
||||||
|
|
||||||
|
p.add(Box.createRigidArea(VGAP5));
|
||||||
|
p.add(s);
|
||||||
|
p.add(Box.createRigidArea(VGAP5));
|
||||||
|
hp.add(p);
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// Vertical Slider 1
|
||||||
|
p = new JPanel();
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
|
||||||
|
p.setBorder(new TitledBorder(getString("SliderDemo.plain")));
|
||||||
|
s = new JSlider(JSlider.VERTICAL, -10, 100, 20);
|
||||||
|
s.getAccessibleContext().setAccessibleName(getString("SliderDemo.plain"));
|
||||||
|
s.getAccessibleContext().setAccessibleDescription(getString("SliderDemo.a_plain_slider"));
|
||||||
|
s.addChangeListener(listener);
|
||||||
|
p.add(Box.createRigidArea(HGAP10));
|
||||||
|
p.add(s);
|
||||||
|
p.add(Box.createRigidArea(HGAP10));
|
||||||
|
vp.add(p);
|
||||||
|
vp.add(Box.createRigidArea(HGAP10));
|
||||||
|
|
||||||
|
// Vertical Slider 2
|
||||||
|
p = new JPanel();
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
|
||||||
|
p.setBorder(new TitledBorder(getString("SliderDemo.majorticks")));
|
||||||
|
s = new JSlider(JSlider.VERTICAL, 100, 1000, 400);
|
||||||
|
|
||||||
|
s.putClientProperty( "JSlider.isFilled", Boolean.TRUE );
|
||||||
|
|
||||||
|
s.setPaintTicks(true);
|
||||||
|
s.setMajorTickSpacing(100);
|
||||||
|
s.getAccessibleContext().setAccessibleName(getString("SliderDemo.majorticks"));
|
||||||
|
s.getAccessibleContext().setAccessibleDescription(getString("SliderDemo.majorticksdescription"));
|
||||||
|
s.addChangeListener(listener);
|
||||||
|
p.add(Box.createRigidArea(HGAP25));
|
||||||
|
p.add(s);
|
||||||
|
p.add(Box.createRigidArea(HGAP25));
|
||||||
|
vp.add(p);
|
||||||
|
vp.add(Box.createRigidArea(HGAP5));
|
||||||
|
|
||||||
|
// Vertical Slider 3
|
||||||
|
p = new JPanel();
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
|
||||||
|
p.setBorder(new TitledBorder(getString("SliderDemo.minorticks")));
|
||||||
|
s = new JSlider(JSlider.VERTICAL, 0, 100, 60);
|
||||||
|
s.setPaintTicks(true);
|
||||||
|
s.setMajorTickSpacing(20);
|
||||||
|
s.setMinorTickSpacing(5);
|
||||||
|
|
||||||
|
s.setPaintLabels( true );
|
||||||
|
|
||||||
|
s.getAccessibleContext().setAccessibleName(getString("SliderDemo.minorticks"));
|
||||||
|
s.getAccessibleContext().setAccessibleDescription(getString("SliderDemo.minorticksdescription"));
|
||||||
|
|
||||||
|
s.addChangeListener(listener);
|
||||||
|
p.add(Box.createRigidArea(HGAP10));
|
||||||
|
p.add(s);
|
||||||
|
p.add(Box.createRigidArea(HGAP10));
|
||||||
|
vp.add(p);
|
||||||
|
vp.add(Box.createRigidArea(HGAP5));
|
||||||
|
|
||||||
|
// Vertical Slider 4
|
||||||
|
p = new JPanel();
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
|
||||||
|
p.setBorder(new TitledBorder(getString("SliderDemo.disabled")));
|
||||||
|
s = new JSlider(JSlider.VERTICAL, 0, 100, 80);
|
||||||
|
s.setPaintTicks(true);
|
||||||
|
s.setMajorTickSpacing(20);
|
||||||
|
s.setMinorTickSpacing(5);
|
||||||
|
s.setEnabled(false);
|
||||||
|
s.getAccessibleContext().setAccessibleName(getString("SliderDemo.disabled"));
|
||||||
|
s.getAccessibleContext().setAccessibleDescription(getString("SliderDemo.disableddescription"));
|
||||||
|
s.addChangeListener(listener);
|
||||||
|
p.add(Box.createRigidArea(HGAP20));
|
||||||
|
p.add(s);
|
||||||
|
p.add(Box.createRigidArea(HGAP20));
|
||||||
|
vp.add(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
class SliderListener implements ChangeListener {
|
||||||
|
JLabel tf;
|
||||||
|
public SliderListener(JLabel f) {
|
||||||
|
tf = f;
|
||||||
|
}
|
||||||
|
public void stateChanged(ChangeEvent e) {
|
||||||
|
JSlider s1 = (JSlider)e.getSource();
|
||||||
|
tf.setText(getString("SliderDemo.slidervalue") + s1.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
276
src/demo/share/jfc/SwingSet2/SplitPaneDemo.java
Normal file
@ -0,0 +1,276 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.table.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Split Pane demo
|
||||||
|
*
|
||||||
|
* @author Scott Violet
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class SplitPaneDemo extends DemoModule {
|
||||||
|
|
||||||
|
JSplitPane splitPane = null;
|
||||||
|
JLabel earth = null;
|
||||||
|
JLabel moon = null;
|
||||||
|
|
||||||
|
JTextField divSize;
|
||||||
|
JTextField earthSize;
|
||||||
|
JTextField moonSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SplitPaneDemo demo = new SplitPaneDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SplitPaneDemo Constructor
|
||||||
|
*/
|
||||||
|
public SplitPaneDemo(SwingSet2 swingset) {
|
||||||
|
super(swingset, "SplitPaneDemo", "toolbar/JSplitPane.gif");
|
||||||
|
|
||||||
|
earth = new JLabel(createImageIcon("splitpane/earth.jpg", getString("SplitPaneDemo.earth")));
|
||||||
|
earth.setMinimumSize(new Dimension(20, 20));
|
||||||
|
|
||||||
|
moon = new JLabel(createImageIcon("splitpane/moon.jpg", getString("SplitPaneDemo.moon")));
|
||||||
|
moon.setMinimumSize(new Dimension(20, 20));
|
||||||
|
|
||||||
|
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, earth, moon);
|
||||||
|
splitPane.setContinuousLayout(true);
|
||||||
|
splitPane.setOneTouchExpandable(true);
|
||||||
|
|
||||||
|
splitPane.setDividerLocation(200);
|
||||||
|
|
||||||
|
getDemoPanel().add(splitPane, BorderLayout.CENTER);
|
||||||
|
getDemoPanel().setBackground(Color.black);
|
||||||
|
|
||||||
|
getDemoPanel().add(createSplitPaneControls(), BorderLayout.SOUTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates controls to alter the JSplitPane.
|
||||||
|
*/
|
||||||
|
protected JPanel createSplitPaneControls() {
|
||||||
|
JPanel wrapper = new JPanel();
|
||||||
|
ButtonGroup group = new ButtonGroup();
|
||||||
|
JRadioButton button;
|
||||||
|
|
||||||
|
Box buttonWrapper = new Box(BoxLayout.X_AXIS);
|
||||||
|
|
||||||
|
wrapper.setLayout(new GridLayout(0, 1));
|
||||||
|
|
||||||
|
/* Create a radio button to vertically split the split pane. */
|
||||||
|
button = new JRadioButton(getString("SplitPaneDemo.vert_split"));
|
||||||
|
button.setMnemonic(getMnemonic("SplitPaneDemo.vert_split_mnemonic"));
|
||||||
|
button.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
group.add(button);
|
||||||
|
buttonWrapper.add(button);
|
||||||
|
|
||||||
|
/* Create a radio button the horizontally split the split pane. */
|
||||||
|
button = new JRadioButton(getString("SplitPaneDemo.horz_split"));
|
||||||
|
button.setMnemonic(getMnemonic("SplitPaneDemo.horz_split_mnemonic"));
|
||||||
|
button.setSelected(true);
|
||||||
|
button.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
group.add(button);
|
||||||
|
buttonWrapper.add(button);
|
||||||
|
|
||||||
|
/* Create a check box as to whether or not the split pane continually
|
||||||
|
lays out the component when dragging. */
|
||||||
|
JCheckBox checkBox = new JCheckBox(getString("SplitPaneDemo.cont_layout"));
|
||||||
|
checkBox.setMnemonic(getMnemonic("SplitPaneDemo.cont_layout_mnemonic"));
|
||||||
|
checkBox.setSelected(true);
|
||||||
|
|
||||||
|
checkBox.addChangeListener(new ChangeListener() {
|
||||||
|
public void stateChanged(ChangeEvent e) {
|
||||||
|
splitPane.setContinuousLayout(
|
||||||
|
((JCheckBox)e.getSource()).isSelected());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttonWrapper.add(checkBox);
|
||||||
|
|
||||||
|
/* Create a check box as to whether or not the split pane divider
|
||||||
|
contains the oneTouchExpandable buttons. */
|
||||||
|
checkBox = new JCheckBox(getString("SplitPaneDemo.one_touch_expandable"));
|
||||||
|
checkBox.setMnemonic(getMnemonic("SplitPaneDemo.one_touch_expandable_mnemonic"));
|
||||||
|
checkBox.setSelected(true);
|
||||||
|
|
||||||
|
checkBox.addChangeListener(new ChangeListener() {
|
||||||
|
public void stateChanged(ChangeEvent e) {
|
||||||
|
splitPane.setOneTouchExpandable(
|
||||||
|
((JCheckBox) e.getSource()).isSelected());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttonWrapper.add(checkBox);
|
||||||
|
wrapper.add(buttonWrapper);
|
||||||
|
|
||||||
|
/* Create a text field to change the divider size. */
|
||||||
|
JPanel tfWrapper;
|
||||||
|
JLabel label;
|
||||||
|
|
||||||
|
divSize = new JTextField();
|
||||||
|
divSize.setText(new Integer(splitPane.getDividerSize()).toString());
|
||||||
|
divSize.setColumns(5);
|
||||||
|
divSize.getAccessibleContext().setAccessibleName(getString("SplitPaneDemo.divider_size"));
|
||||||
|
divSize.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
String value = ((JTextField)e.getSource()).getText();
|
||||||
|
int newSize;
|
||||||
|
|
||||||
|
try {
|
||||||
|
newSize = Integer.parseInt(value);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
newSize = -1;
|
||||||
|
}
|
||||||
|
if(newSize > 0) {
|
||||||
|
splitPane.setDividerSize(newSize);
|
||||||
|
} else {
|
||||||
|
JOptionPane.showMessageDialog(splitPane,
|
||||||
|
getString("SplitPaneDemo.invalid_divider_size"),
|
||||||
|
getString("SplitPaneDemo.error"),
|
||||||
|
JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
label = new JLabel(getString("SplitPaneDemo.divider_size"));
|
||||||
|
tfWrapper = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
||||||
|
tfWrapper.add(label);
|
||||||
|
tfWrapper.add(divSize);
|
||||||
|
label.setLabelFor(divSize);
|
||||||
|
label.setDisplayedMnemonic(getMnemonic("SplitPaneDemo.divider_size_mnemonic"));
|
||||||
|
wrapper.add(tfWrapper);
|
||||||
|
|
||||||
|
/* Create a text field that will change the preferred/minimum size
|
||||||
|
of the earth component. */
|
||||||
|
earthSize = new JTextField(String.valueOf(earth.getMinimumSize().width));
|
||||||
|
earthSize.setColumns(5);
|
||||||
|
earthSize.getAccessibleContext().setAccessibleName(getString("SplitPaneDemo.first_component_min_size"));
|
||||||
|
earthSize.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
String value = ((JTextField)e.getSource()).getText();
|
||||||
|
int newSize;
|
||||||
|
|
||||||
|
try {
|
||||||
|
newSize = Integer.parseInt(value);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
newSize = -1;
|
||||||
|
}
|
||||||
|
if(newSize > 10) {
|
||||||
|
earth.setMinimumSize(new Dimension(newSize, newSize));
|
||||||
|
} else {
|
||||||
|
JOptionPane.showMessageDialog(splitPane,
|
||||||
|
getString("SplitPaneDemo.invalid_min_size") +
|
||||||
|
getString("SplitPaneDemo.must_be_greater_than") + 10,
|
||||||
|
getString("SplitPaneDemo.error"),
|
||||||
|
JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
label = new JLabel(getString("SplitPaneDemo.first_component_min_size"));
|
||||||
|
tfWrapper = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
||||||
|
tfWrapper.add(label);
|
||||||
|
tfWrapper.add(earthSize);
|
||||||
|
label.setLabelFor(earthSize);
|
||||||
|
label.setDisplayedMnemonic(getMnemonic("SplitPaneDemo.first_component_min_size_mnemonic"));
|
||||||
|
wrapper.add(tfWrapper);
|
||||||
|
|
||||||
|
/* Create a text field that will change the preferred/minimum size
|
||||||
|
of the moon component. */
|
||||||
|
moonSize = new JTextField(String.valueOf(moon.getMinimumSize().width));
|
||||||
|
moonSize.setColumns(5);
|
||||||
|
moonSize.getAccessibleContext().setAccessibleName(getString("SplitPaneDemo.second_component_min_size"));
|
||||||
|
moonSize.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
String value = ((JTextField)e.getSource()).getText();
|
||||||
|
int newSize;
|
||||||
|
|
||||||
|
try {
|
||||||
|
newSize = Integer.parseInt(value);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
newSize = -1;
|
||||||
|
}
|
||||||
|
if(newSize > 10) {
|
||||||
|
moon.setMinimumSize(new Dimension(newSize, newSize));
|
||||||
|
} else {
|
||||||
|
JOptionPane.showMessageDialog(splitPane,
|
||||||
|
getString("SplitPaneDemo.invalid_min_size") +
|
||||||
|
getString("SplitPaneDemo.must_be_greater_than") + 10,
|
||||||
|
getString("SplitPaneDemo.error"),
|
||||||
|
JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
label = new JLabel(getString("SplitPaneDemo.second_component_min_size"));
|
||||||
|
tfWrapper = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
||||||
|
tfWrapper.add(label);
|
||||||
|
tfWrapper.add(moonSize);
|
||||||
|
label.setLabelFor(moonSize);
|
||||||
|
label.setDisplayedMnemonic(getMnemonic("SplitPaneDemo.second_component_min_size_mnemonic"));
|
||||||
|
wrapper.add(tfWrapper);
|
||||||
|
|
||||||
|
return wrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateDragEnabled(boolean dragEnabled) {
|
||||||
|
divSize.setDragEnabled(dragEnabled);
|
||||||
|
earthSize.setDragEnabled(dragEnabled);
|
||||||
|
moonSize.setDragEnabled(dragEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
14
src/demo/share/jfc/SwingSet2/SwingSet2.html
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>SwingSet demo</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1>SwingSet demo</h1>
|
||||||
|
<applet code=SwingSet2Applet
|
||||||
|
archive="SwingSet2.jar"
|
||||||
|
width=695 height=525>
|
||||||
|
</applet>
|
||||||
|
</body>
|
||||||
|
</html>
|
1367
src/demo/share/jfc/SwingSet2/SwingSet2.java
Normal file
78
src/demo/share/jfc/SwingSet2/SwingSet2Applet.java
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class SwingSet2Applet extends JApplet {
|
||||||
|
public void init() {
|
||||||
|
getContentPane().setLayout(new BorderLayout());
|
||||||
|
getContentPane().add(new SwingSet2(this), BorderLayout.CENTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
public URL getURL(String filename) {
|
||||||
|
URL codeBase = this.getCodeBase();
|
||||||
|
URL url = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
url = new URL(codeBase, filename);
|
||||||
|
System.out.println(url);
|
||||||
|
} catch (java.net.MalformedURLException e) {
|
||||||
|
System.out.println("Error: badly specified URL");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
233
src/demo/share/jfc/SwingSet2/TabbedPaneDemo.java
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JTabbedPane Demo
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class TabbedPaneDemo extends DemoModule implements ActionListener {
|
||||||
|
HeadSpin spin;
|
||||||
|
|
||||||
|
JTabbedPane tabbedpane;
|
||||||
|
|
||||||
|
ButtonGroup group;
|
||||||
|
|
||||||
|
JRadioButton top;
|
||||||
|
JRadioButton bottom;
|
||||||
|
JRadioButton left;
|
||||||
|
JRadioButton right;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
TabbedPaneDemo demo = new TabbedPaneDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TabbedPaneDemo Constructor
|
||||||
|
*/
|
||||||
|
public TabbedPaneDemo(SwingSet2 swingset) {
|
||||||
|
// Set the title for this demo, and an icon used to represent this
|
||||||
|
// demo inside the SwingSet2 app.
|
||||||
|
super(swingset, "TabbedPaneDemo", "toolbar/JTabbedPane.gif");
|
||||||
|
|
||||||
|
// create tab position controls
|
||||||
|
JPanel tabControls = new JPanel();
|
||||||
|
tabControls.add(new JLabel(getString("TabbedPaneDemo.label")));
|
||||||
|
top = (JRadioButton) tabControls.add(new JRadioButton(getString("TabbedPaneDemo.top")));
|
||||||
|
left = (JRadioButton) tabControls.add(new JRadioButton(getString("TabbedPaneDemo.left")));
|
||||||
|
bottom = (JRadioButton) tabControls.add(new JRadioButton(getString("TabbedPaneDemo.bottom")));
|
||||||
|
right = (JRadioButton) tabControls.add(new JRadioButton(getString("TabbedPaneDemo.right")));
|
||||||
|
getDemoPanel().add(tabControls, BorderLayout.NORTH);
|
||||||
|
|
||||||
|
group = new ButtonGroup();
|
||||||
|
group.add(top);
|
||||||
|
group.add(bottom);
|
||||||
|
group.add(left);
|
||||||
|
group.add(right);
|
||||||
|
|
||||||
|
top.setSelected(true);
|
||||||
|
|
||||||
|
top.addActionListener(this);
|
||||||
|
bottom.addActionListener(this);
|
||||||
|
left.addActionListener(this);
|
||||||
|
right.addActionListener(this);
|
||||||
|
|
||||||
|
// create tab
|
||||||
|
tabbedpane = new JTabbedPane();
|
||||||
|
getDemoPanel().add(tabbedpane, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
String name = getString("TabbedPaneDemo.laine");
|
||||||
|
JLabel pix = new JLabel(createImageIcon("tabbedpane/laine.jpg", name));
|
||||||
|
tabbedpane.add(name, pix);
|
||||||
|
|
||||||
|
name = getString("TabbedPaneDemo.ewan");
|
||||||
|
pix = new JLabel(createImageIcon("tabbedpane/ewan.jpg", name));
|
||||||
|
tabbedpane.add(name, pix);
|
||||||
|
|
||||||
|
name = getString("TabbedPaneDemo.hania");
|
||||||
|
pix = new JLabel(createImageIcon("tabbedpane/hania.jpg", name));
|
||||||
|
tabbedpane.add(name, pix);
|
||||||
|
|
||||||
|
name = getString("TabbedPaneDemo.bounce");
|
||||||
|
spin = new HeadSpin();
|
||||||
|
tabbedpane.add(name, spin);
|
||||||
|
|
||||||
|
tabbedpane.getModel().addChangeListener(
|
||||||
|
new ChangeListener() {
|
||||||
|
public void stateChanged(ChangeEvent e) {
|
||||||
|
SingleSelectionModel model = (SingleSelectionModel) e.getSource();
|
||||||
|
if(model.getSelectedIndex() == tabbedpane.getTabCount()-1) {
|
||||||
|
spin.go();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if(e.getSource() == top) {
|
||||||
|
tabbedpane.setTabPlacement(JTabbedPane.TOP);
|
||||||
|
} else if(e.getSource() == left) {
|
||||||
|
tabbedpane.setTabPlacement(JTabbedPane.LEFT);
|
||||||
|
} else if(e.getSource() == bottom) {
|
||||||
|
tabbedpane.setTabPlacement(JTabbedPane.BOTTOM);
|
||||||
|
} else if(e.getSource() == right) {
|
||||||
|
tabbedpane.setTabPlacement(JTabbedPane.RIGHT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class HeadSpin extends JComponent implements ActionListener {
|
||||||
|
javax.swing.Timer animator;
|
||||||
|
|
||||||
|
ImageIcon icon[] = new ImageIcon[6];
|
||||||
|
|
||||||
|
int tmpScale;
|
||||||
|
|
||||||
|
static final int numImages = 6;
|
||||||
|
|
||||||
|
double x[] = new double[numImages];
|
||||||
|
double y[] = new double[numImages];
|
||||||
|
|
||||||
|
int xh[] = new int[numImages];
|
||||||
|
int yh[] = new int[numImages];
|
||||||
|
|
||||||
|
double scale[] = new double[numImages];
|
||||||
|
|
||||||
|
public HeadSpin() {
|
||||||
|
setBackground(Color.black);
|
||||||
|
icon[0] = createImageIcon("tabbedpane/ewan.gif", getString("TabbedPaneDemo.ewan"));
|
||||||
|
icon[1] = createImageIcon("tabbedpane/stephen.gif", getString("TabbedPaneDemo.stephen"));
|
||||||
|
icon[2] = createImageIcon("tabbedpane/david.gif", getString("TabbedPaneDemo.david"));
|
||||||
|
icon[3] = createImageIcon("tabbedpane/matthew.gif", getString("TabbedPaneDemo.matthew"));
|
||||||
|
icon[4] = createImageIcon("tabbedpane/blake.gif", getString("TabbedPaneDemo.blake"));
|
||||||
|
icon[5] = createImageIcon("tabbedpane/brooke.gif", getString("TabbedPaneDemo.brooke"));
|
||||||
|
|
||||||
|
/*
|
||||||
|
for(int i = 0; i < 6; i++) {
|
||||||
|
x[i] = (double) rand.nextInt(500);
|
||||||
|
y[i] = (double) rand.nextInt(500);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
public void go() {
|
||||||
|
animator = new javax.swing.Timer(22 + 22 + 22, this);
|
||||||
|
animator.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paint(Graphics g) {
|
||||||
|
g.setColor(getBackground());
|
||||||
|
g.fillRect(0, 0, getWidth(), getHeight());
|
||||||
|
|
||||||
|
for(int i = 0; i < numImages; i++) {
|
||||||
|
if(x[i] > 3*i) {
|
||||||
|
nudge(i);
|
||||||
|
squish(g, icon[i], xh[i], yh[i], scale[i]);
|
||||||
|
} else {
|
||||||
|
x[i] += .05;
|
||||||
|
y[i] += .05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Random rand = new Random();
|
||||||
|
|
||||||
|
public void nudge(int i) {
|
||||||
|
x[i] += (double) rand.nextInt(1000) / 8756;
|
||||||
|
y[i] += (double) rand.nextInt(1000) / 5432;
|
||||||
|
int tmpScale = (int) (Math.abs(Math.sin(x[i])) * 10);
|
||||||
|
scale[i] = (double) tmpScale / 10;
|
||||||
|
int nudgeX = (int) (((double) getWidth()/2) * .8);
|
||||||
|
int nudgeY = (int) (((double) getHeight()/2) * .60);
|
||||||
|
xh[i] = (int) (Math.sin(x[i]) * nudgeX) + nudgeX;
|
||||||
|
yh[i] = (int) (Math.sin(y[i]) * nudgeY) + nudgeY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void squish(Graphics g, ImageIcon icon, int x, int y, double scale) {
|
||||||
|
if(isVisible()) {
|
||||||
|
g.drawImage(icon.getImage(), x, y,
|
||||||
|
(int) (icon.getIconWidth()*scale),
|
||||||
|
(int) (icon.getIconHeight()*scale),
|
||||||
|
this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if(isVisible()) {
|
||||||
|
repaint();
|
||||||
|
} else {
|
||||||
|
animator.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
741
src/demo/share/jfc/SwingSet2/TableDemo.java
Normal file
@ -0,0 +1,741 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.table.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.awt.print.PrinterException;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Table demo
|
||||||
|
*
|
||||||
|
* @author Philip Milne
|
||||||
|
* @author Steve Wilson
|
||||||
|
*/
|
||||||
|
public class TableDemo extends DemoModule {
|
||||||
|
JTable tableView;
|
||||||
|
JScrollPane scrollpane;
|
||||||
|
Dimension origin = new Dimension(0, 0);
|
||||||
|
|
||||||
|
JCheckBox isColumnReorderingAllowedCheckBox;
|
||||||
|
JCheckBox showHorizontalLinesCheckBox;
|
||||||
|
JCheckBox showVerticalLinesCheckBox;
|
||||||
|
|
||||||
|
JCheckBox isColumnSelectionAllowedCheckBox;
|
||||||
|
JCheckBox isRowSelectionAllowedCheckBox;
|
||||||
|
|
||||||
|
JLabel interCellSpacingLabel;
|
||||||
|
JLabel rowHeightLabel;
|
||||||
|
|
||||||
|
JSlider interCellSpacingSlider;
|
||||||
|
JSlider rowHeightSlider;
|
||||||
|
|
||||||
|
JComboBox selectionModeComboBox = null;
|
||||||
|
JComboBox resizeModeComboBox = null;
|
||||||
|
|
||||||
|
JLabel headerLabel;
|
||||||
|
JLabel footerLabel;
|
||||||
|
|
||||||
|
JTextField headerTextField;
|
||||||
|
JTextField footerTextField;
|
||||||
|
|
||||||
|
JCheckBox fitWidth;
|
||||||
|
JButton printButton;
|
||||||
|
|
||||||
|
JPanel controlPanel;
|
||||||
|
JScrollPane tableAggregate;
|
||||||
|
|
||||||
|
String path = "food/";
|
||||||
|
|
||||||
|
final int INITIAL_ROWHEIGHT = 33;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
TableDemo demo = new TableDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TableDemo Constructor
|
||||||
|
*/
|
||||||
|
public TableDemo(SwingSet2 swingset) {
|
||||||
|
super(swingset, "TableDemo", "toolbar/JTable.gif");
|
||||||
|
|
||||||
|
getDemoPanel().setLayout(new BorderLayout());
|
||||||
|
controlPanel = new JPanel();
|
||||||
|
controlPanel.setLayout(new BoxLayout(controlPanel, BoxLayout.X_AXIS));
|
||||||
|
JPanel cbPanel = new JPanel(new GridLayout(3, 2));
|
||||||
|
JPanel labelPanel = new JPanel(new GridLayout(2, 1)) {
|
||||||
|
public Dimension getMaximumSize() {
|
||||||
|
return new Dimension(getPreferredSize().width, super.getMaximumSize().height);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
JPanel sliderPanel = new JPanel(new GridLayout(2, 1)) {
|
||||||
|
public Dimension getMaximumSize() {
|
||||||
|
return new Dimension(getPreferredSize().width, super.getMaximumSize().height);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
JPanel comboPanel = new JPanel(new GridLayout(2, 1));
|
||||||
|
JPanel printPanel = new JPanel(new ColumnLayout());
|
||||||
|
|
||||||
|
getDemoPanel().add(controlPanel, BorderLayout.NORTH);
|
||||||
|
Vector relatedComponents = new Vector();
|
||||||
|
|
||||||
|
|
||||||
|
// check box panel
|
||||||
|
isColumnReorderingAllowedCheckBox = new JCheckBox(getString("TableDemo.reordering_allowed"), true);
|
||||||
|
isColumnReorderingAllowedCheckBox.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
boolean flag = ((JCheckBox)e.getSource()).isSelected();
|
||||||
|
tableView.getTableHeader().setReorderingAllowed(flag);
|
||||||
|
tableView.repaint();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
showHorizontalLinesCheckBox = new JCheckBox(getString("TableDemo.horz_lines"), true);
|
||||||
|
showHorizontalLinesCheckBox.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
boolean flag = ((JCheckBox)e.getSource()).isSelected();
|
||||||
|
tableView.setShowHorizontalLines(flag); ;
|
||||||
|
tableView.repaint();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
showVerticalLinesCheckBox = new JCheckBox(getString("TableDemo.vert_lines"), true);
|
||||||
|
showVerticalLinesCheckBox.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
boolean flag = ((JCheckBox)e.getSource()).isSelected();
|
||||||
|
tableView.setShowVerticalLines(flag); ;
|
||||||
|
tableView.repaint();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Show that showHorizontal/Vertical controls are related
|
||||||
|
relatedComponents.removeAllElements();
|
||||||
|
relatedComponents.add(showHorizontalLinesCheckBox);
|
||||||
|
relatedComponents.add(showVerticalLinesCheckBox);
|
||||||
|
buildAccessibleGroup(relatedComponents);
|
||||||
|
|
||||||
|
isRowSelectionAllowedCheckBox = new JCheckBox(getString("TableDemo.row_selection"), true);
|
||||||
|
isRowSelectionAllowedCheckBox.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
boolean flag = ((JCheckBox)e.getSource()).isSelected();
|
||||||
|
tableView.setRowSelectionAllowed(flag); ;
|
||||||
|
tableView.repaint();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
isColumnSelectionAllowedCheckBox = new JCheckBox(getString("TableDemo.column_selection"), false);
|
||||||
|
isColumnSelectionAllowedCheckBox.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
boolean flag = ((JCheckBox)e.getSource()).isSelected();
|
||||||
|
tableView.setColumnSelectionAllowed(flag); ;
|
||||||
|
tableView.repaint();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Show that row/column selections are related
|
||||||
|
relatedComponents.removeAllElements();
|
||||||
|
relatedComponents.add(isColumnSelectionAllowedCheckBox);
|
||||||
|
relatedComponents.add(isRowSelectionAllowedCheckBox);
|
||||||
|
buildAccessibleGroup(relatedComponents);
|
||||||
|
|
||||||
|
cbPanel.add(isColumnReorderingAllowedCheckBox);
|
||||||
|
cbPanel.add(isRowSelectionAllowedCheckBox);
|
||||||
|
cbPanel.add(showHorizontalLinesCheckBox);
|
||||||
|
cbPanel.add(isColumnSelectionAllowedCheckBox);
|
||||||
|
cbPanel.add(showVerticalLinesCheckBox);
|
||||||
|
|
||||||
|
|
||||||
|
// label panel
|
||||||
|
interCellSpacingLabel = new JLabel(getString("TableDemo.intercell_spacing_colon"));
|
||||||
|
labelPanel.add(interCellSpacingLabel);
|
||||||
|
|
||||||
|
rowHeightLabel = new JLabel(getString("TableDemo.row_height_colon"));
|
||||||
|
labelPanel.add(rowHeightLabel);
|
||||||
|
|
||||||
|
|
||||||
|
// slider panel
|
||||||
|
interCellSpacingSlider = new JSlider(JSlider.HORIZONTAL, 0, 10, 1);
|
||||||
|
interCellSpacingSlider.getAccessibleContext().setAccessibleName(getString("TableDemo.intercell_spacing"));
|
||||||
|
interCellSpacingLabel.setLabelFor(interCellSpacingSlider);
|
||||||
|
sliderPanel.add(interCellSpacingSlider);
|
||||||
|
interCellSpacingSlider.addChangeListener(new ChangeListener() {
|
||||||
|
public void stateChanged(ChangeEvent e) {
|
||||||
|
int spacing = ((JSlider)e.getSource()).getValue();
|
||||||
|
tableView.setIntercellSpacing(new Dimension(spacing, spacing));
|
||||||
|
tableView.repaint();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
rowHeightSlider = new JSlider(JSlider.HORIZONTAL, 5, 100, INITIAL_ROWHEIGHT);
|
||||||
|
rowHeightSlider.getAccessibleContext().setAccessibleName(getString("TableDemo.row_height"));
|
||||||
|
rowHeightLabel.setLabelFor(rowHeightSlider);
|
||||||
|
sliderPanel.add(rowHeightSlider);
|
||||||
|
rowHeightSlider.addChangeListener(new ChangeListener() {
|
||||||
|
public void stateChanged(ChangeEvent e) {
|
||||||
|
int height = ((JSlider)e.getSource()).getValue();
|
||||||
|
tableView.setRowHeight(height);
|
||||||
|
tableView.repaint();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Show that spacing controls are related
|
||||||
|
relatedComponents.removeAllElements();
|
||||||
|
relatedComponents.add(interCellSpacingSlider);
|
||||||
|
relatedComponents.add(rowHeightSlider);
|
||||||
|
buildAccessibleGroup(relatedComponents);
|
||||||
|
|
||||||
|
|
||||||
|
// Create the table.
|
||||||
|
tableAggregate = createTable();
|
||||||
|
getDemoPanel().add(tableAggregate, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
|
||||||
|
// ComboBox for selection modes.
|
||||||
|
JPanel selectMode = new JPanel();
|
||||||
|
selectMode.setLayout(new BoxLayout(selectMode, BoxLayout.X_AXIS));
|
||||||
|
selectMode.setBorder(new TitledBorder(getString("TableDemo.selection_mode")));
|
||||||
|
|
||||||
|
|
||||||
|
selectionModeComboBox = new JComboBox() {
|
||||||
|
public Dimension getMaximumSize() {
|
||||||
|
return getPreferredSize();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
selectionModeComboBox.addItem(getString("TableDemo.single"));
|
||||||
|
selectionModeComboBox.addItem(getString("TableDemo.one_range"));
|
||||||
|
selectionModeComboBox.addItem(getString("TableDemo.multiple_ranges"));
|
||||||
|
selectionModeComboBox.setSelectedIndex(tableView.getSelectionModel().getSelectionMode());
|
||||||
|
selectionModeComboBox.addItemListener(new ItemListener() {
|
||||||
|
public void itemStateChanged(ItemEvent e) {
|
||||||
|
JComboBox source = (JComboBox)e.getSource();
|
||||||
|
tableView.setSelectionMode(source.getSelectedIndex());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
selectMode.add(Box.createHorizontalStrut(2));
|
||||||
|
selectMode.add(selectionModeComboBox);
|
||||||
|
selectMode.add(Box.createHorizontalGlue());
|
||||||
|
comboPanel.add(selectMode);
|
||||||
|
|
||||||
|
// Combo box for table resize mode.
|
||||||
|
JPanel resizeMode = new JPanel();
|
||||||
|
resizeMode.setLayout(new BoxLayout(resizeMode, BoxLayout.X_AXIS));
|
||||||
|
resizeMode.setBorder(new TitledBorder(getString("TableDemo.autoresize_mode")));
|
||||||
|
|
||||||
|
|
||||||
|
resizeModeComboBox = new JComboBox() {
|
||||||
|
public Dimension getMaximumSize() {
|
||||||
|
return getPreferredSize();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
resizeModeComboBox.addItem(getString("TableDemo.off"));
|
||||||
|
resizeModeComboBox.addItem(getString("TableDemo.column_boundaries"));
|
||||||
|
resizeModeComboBox.addItem(getString("TableDemo.subsequent_columns"));
|
||||||
|
resizeModeComboBox.addItem(getString("TableDemo.last_column"));
|
||||||
|
resizeModeComboBox.addItem(getString("TableDemo.all_columns"));
|
||||||
|
resizeModeComboBox.setSelectedIndex(tableView.getAutoResizeMode());
|
||||||
|
resizeModeComboBox.addItemListener(new ItemListener() {
|
||||||
|
public void itemStateChanged(ItemEvent e) {
|
||||||
|
JComboBox source = (JComboBox)e.getSource();
|
||||||
|
tableView.setAutoResizeMode(source.getSelectedIndex());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
resizeMode.add(Box.createHorizontalStrut(2));
|
||||||
|
resizeMode.add(resizeModeComboBox);
|
||||||
|
resizeMode.add(Box.createHorizontalGlue());
|
||||||
|
comboPanel.add(resizeMode);
|
||||||
|
|
||||||
|
// print panel
|
||||||
|
printPanel.setBorder(new TitledBorder(getString("TableDemo.printing")));
|
||||||
|
headerLabel = new JLabel(getString("TableDemo.header"));
|
||||||
|
footerLabel = new JLabel(getString("TableDemo.footer"));
|
||||||
|
headerTextField = new JTextField(getString("TableDemo.headerText"), 15);
|
||||||
|
footerTextField = new JTextField(getString("TableDemo.footerText"), 15);
|
||||||
|
fitWidth = new JCheckBox(getString("TableDemo.fitWidth"), true);
|
||||||
|
printButton = new JButton(getString("TableDemo.print"));
|
||||||
|
printButton.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent ae) {
|
||||||
|
printTable();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
printPanel.add(headerLabel);
|
||||||
|
printPanel.add(headerTextField);
|
||||||
|
printPanel.add(footerLabel);
|
||||||
|
printPanel.add(footerTextField);
|
||||||
|
|
||||||
|
JPanel buttons = new JPanel();
|
||||||
|
buttons.add(fitWidth);
|
||||||
|
buttons.add(printButton);
|
||||||
|
|
||||||
|
printPanel.add(buttons);
|
||||||
|
|
||||||
|
// Show that printing controls are related
|
||||||
|
relatedComponents.removeAllElements();
|
||||||
|
relatedComponents.add(headerTextField);
|
||||||
|
relatedComponents.add(footerTextField);
|
||||||
|
relatedComponents.add(printButton);
|
||||||
|
buildAccessibleGroup(relatedComponents);
|
||||||
|
|
||||||
|
// wrap up the panels and add them
|
||||||
|
JPanel sliderWrapper = new JPanel();
|
||||||
|
sliderWrapper.setLayout(new BoxLayout(sliderWrapper, BoxLayout.X_AXIS));
|
||||||
|
sliderWrapper.add(labelPanel);
|
||||||
|
sliderWrapper.add(sliderPanel);
|
||||||
|
sliderWrapper.add(Box.createHorizontalGlue());
|
||||||
|
sliderWrapper.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 0));
|
||||||
|
|
||||||
|
JPanel leftWrapper = new JPanel();
|
||||||
|
leftWrapper.setLayout(new BoxLayout(leftWrapper, BoxLayout.Y_AXIS));
|
||||||
|
leftWrapper.add(cbPanel);
|
||||||
|
leftWrapper.add(sliderWrapper);
|
||||||
|
|
||||||
|
// add everything
|
||||||
|
controlPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 2, 0));
|
||||||
|
controlPanel.add(leftWrapper);
|
||||||
|
controlPanel.add(comboPanel);
|
||||||
|
controlPanel.add(printPanel);
|
||||||
|
|
||||||
|
setTableControllers(); // Set accessibility information
|
||||||
|
|
||||||
|
getDemoPanel().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
|
||||||
|
.put(KeyStroke.getKeyStroke("ctrl P"), "print");
|
||||||
|
|
||||||
|
getDemoPanel().getActionMap().put("print", new AbstractAction() {
|
||||||
|
public void actionPerformed(ActionEvent ae) {
|
||||||
|
printTable();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
} // TableDemo()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the Accessibility MEMBER_OF property to denote that
|
||||||
|
* these components work together as a group. Each object
|
||||||
|
* is set to be a MEMBER_OF an array that contains all of
|
||||||
|
* the objects in the group, including itself.
|
||||||
|
*
|
||||||
|
* @param components The list of objects that are related
|
||||||
|
*/
|
||||||
|
void buildAccessibleGroup(Vector components) {
|
||||||
|
|
||||||
|
AccessibleContext context = null;
|
||||||
|
int numComponents = components.size();
|
||||||
|
Object[] group = components.toArray();
|
||||||
|
Object object = null;
|
||||||
|
for (int i = 0; i < numComponents; ++i) {
|
||||||
|
object = components.elementAt(i);
|
||||||
|
if (object instanceof Accessible) {
|
||||||
|
context = ((Accessible)components.elementAt(i)).
|
||||||
|
getAccessibleContext();
|
||||||
|
context.getAccessibleRelationSet().add(
|
||||||
|
new AccessibleRelation(
|
||||||
|
AccessibleRelation.MEMBER_OF, group));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // buildAccessibleGroup()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This sets CONTROLLER_FOR on the controls that manipulate the
|
||||||
|
* table and CONTROLLED_BY relationships on the table to point
|
||||||
|
* back to the controllers.
|
||||||
|
*/
|
||||||
|
private void setTableControllers() {
|
||||||
|
|
||||||
|
// Set up the relationships to show what controls the table
|
||||||
|
setAccessibleController(isColumnReorderingAllowedCheckBox,
|
||||||
|
tableAggregate);
|
||||||
|
setAccessibleController(showHorizontalLinesCheckBox,
|
||||||
|
tableAggregate);
|
||||||
|
setAccessibleController(showVerticalLinesCheckBox,
|
||||||
|
tableAggregate);
|
||||||
|
setAccessibleController(isColumnSelectionAllowedCheckBox,
|
||||||
|
tableAggregate);
|
||||||
|
setAccessibleController(isRowSelectionAllowedCheckBox,
|
||||||
|
tableAggregate);
|
||||||
|
setAccessibleController(interCellSpacingSlider,
|
||||||
|
tableAggregate);
|
||||||
|
setAccessibleController(rowHeightSlider,
|
||||||
|
tableAggregate);
|
||||||
|
setAccessibleController(selectionModeComboBox,
|
||||||
|
tableAggregate);
|
||||||
|
setAccessibleController(resizeModeComboBox,
|
||||||
|
tableAggregate);
|
||||||
|
} // setTableControllers()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up accessibility relationships to denote that one
|
||||||
|
* object controls another. The CONTROLLER_FOR property is
|
||||||
|
* set on the controller object, and the CONTROLLED_BY
|
||||||
|
* property is set on the target object.
|
||||||
|
*/
|
||||||
|
private void setAccessibleController(JComponent controller,
|
||||||
|
JComponent target) {
|
||||||
|
AccessibleRelationSet controllerRelations =
|
||||||
|
controller.getAccessibleContext().getAccessibleRelationSet();
|
||||||
|
AccessibleRelationSet targetRelations =
|
||||||
|
target.getAccessibleContext().getAccessibleRelationSet();
|
||||||
|
|
||||||
|
controllerRelations.add(
|
||||||
|
new AccessibleRelation(
|
||||||
|
AccessibleRelation.CONTROLLER_FOR, target));
|
||||||
|
targetRelations.add(
|
||||||
|
new AccessibleRelation(
|
||||||
|
AccessibleRelation.CONTROLLED_BY, controller));
|
||||||
|
} // setAccessibleController()
|
||||||
|
|
||||||
|
public JScrollPane createTable() {
|
||||||
|
|
||||||
|
// final
|
||||||
|
final String[] names = {
|
||||||
|
getString("TableDemo.first_name"),
|
||||||
|
getString("TableDemo.last_name"),
|
||||||
|
getString("TableDemo.favorite_color"),
|
||||||
|
getString("TableDemo.favorite_movie"),
|
||||||
|
getString("TableDemo.favorite_number"),
|
||||||
|
getString("TableDemo.favorite_food")
|
||||||
|
};
|
||||||
|
|
||||||
|
ImageIcon apple = createImageIcon("food/apple.jpg", getString("TableDemo.apple"));
|
||||||
|
ImageIcon asparagus = createImageIcon("food/asparagus.gif", getString("TableDemo.asparagus"));
|
||||||
|
ImageIcon banana = createImageIcon("food/banana.gif", getString("TableDemo.banana"));
|
||||||
|
ImageIcon broccoli = createImageIcon("food/broccoli.gif", getString("TableDemo.broccoli"));
|
||||||
|
ImageIcon cantaloupe = createImageIcon("food/cantaloupe.gif", getString("TableDemo.cantaloupe"));
|
||||||
|
ImageIcon carrot = createImageIcon("food/carrot.gif", getString("TableDemo.carrot"));
|
||||||
|
ImageIcon corn = createImageIcon("food/corn.gif", getString("TableDemo.corn"));
|
||||||
|
ImageIcon grapes = createImageIcon("food/grapes.gif", getString("TableDemo.grapes"));
|
||||||
|
ImageIcon grapefruit = createImageIcon("food/grapefruit.gif", getString("TableDemo.grapefruit"));
|
||||||
|
ImageIcon kiwi = createImageIcon("food/kiwi.gif", getString("TableDemo.kiwi"));
|
||||||
|
ImageIcon onion = createImageIcon("food/onion.gif", getString("TableDemo.onion"));
|
||||||
|
ImageIcon pear = createImageIcon("food/pear.gif", getString("TableDemo.pear"));
|
||||||
|
ImageIcon peach = createImageIcon("food/peach.gif", getString("TableDemo.peach"));
|
||||||
|
ImageIcon pepper = createImageIcon("food/pepper.gif", getString("TableDemo.pepper"));
|
||||||
|
ImageIcon pickle = createImageIcon("food/pickle.gif", getString("TableDemo.pickle"));
|
||||||
|
ImageIcon pineapple = createImageIcon("food/pineapple.gif", getString("TableDemo.pineapple"));
|
||||||
|
ImageIcon raspberry = createImageIcon("food/raspberry.gif", getString("TableDemo.raspberry"));
|
||||||
|
ImageIcon sparegrass = createImageIcon("food/asparagus.gif", getString("TableDemo.sparegrass"));
|
||||||
|
ImageIcon strawberry = createImageIcon("food/strawberry.gif", getString("TableDemo.strawberry"));
|
||||||
|
ImageIcon tomato = createImageIcon("food/tomato.gif", getString("TableDemo.tomato"));
|
||||||
|
ImageIcon watermelon = createImageIcon("food/watermelon.gif", getString("TableDemo.watermelon"));
|
||||||
|
|
||||||
|
NamedColor aqua = new NamedColor(new Color(127, 255, 212), getString("TableDemo.aqua"));
|
||||||
|
NamedColor beige = new NamedColor(new Color(245, 245, 220), getString("TableDemo.beige"));
|
||||||
|
NamedColor black = new NamedColor(Color.black, getString("TableDemo.black"));
|
||||||
|
NamedColor blue = new NamedColor(new Color(0, 0, 222), getString("TableDemo.blue"));
|
||||||
|
NamedColor eblue = new NamedColor(Color.blue, getString("TableDemo.eblue"));
|
||||||
|
NamedColor jfcblue = new NamedColor(new Color(204, 204, 255), getString("TableDemo.jfcblue"));
|
||||||
|
NamedColor jfcblue2 = new NamedColor(new Color(153, 153, 204), getString("TableDemo.jfcblue2"));
|
||||||
|
NamedColor cybergreen = new NamedColor(Color.green.darker().brighter(), getString("TableDemo.cybergreen"));
|
||||||
|
NamedColor darkgreen = new NamedColor(new Color(0, 100, 75), getString("TableDemo.darkgreen"));
|
||||||
|
NamedColor forestgreen = new NamedColor(Color.green.darker(), getString("TableDemo.forestgreen"));
|
||||||
|
NamedColor gray = new NamedColor(Color.gray, getString("TableDemo.gray"));
|
||||||
|
NamedColor green = new NamedColor(Color.green, getString("TableDemo.green"));
|
||||||
|
NamedColor orange = new NamedColor(new Color(255, 165, 0), getString("TableDemo.orange"));
|
||||||
|
NamedColor purple = new NamedColor(new Color(160, 32, 240), getString("TableDemo.purple"));
|
||||||
|
NamedColor red = new NamedColor(Color.red, getString("TableDemo.red"));
|
||||||
|
NamedColor rustred = new NamedColor(Color.red.darker(), getString("TableDemo.rustred"));
|
||||||
|
NamedColor sunpurple = new NamedColor(new Color(100, 100, 255), getString("TableDemo.sunpurple"));
|
||||||
|
NamedColor suspectpink = new NamedColor(new Color(255, 105, 180), getString("TableDemo.suspectpink"));
|
||||||
|
NamedColor turquoise = new NamedColor(new Color(0, 255, 255), getString("TableDemo.turquoise"));
|
||||||
|
NamedColor violet = new NamedColor(new Color(238, 130, 238), getString("TableDemo.violet"));
|
||||||
|
NamedColor yellow = new NamedColor(Color.yellow, getString("TableDemo.yellow"));
|
||||||
|
|
||||||
|
// Create the dummy data (a few rows of names)
|
||||||
|
final Object[][] data = {
|
||||||
|
{"Mike", "Albers", green, getString("TableDemo.brazil"), new Double(44.0), strawberry},
|
||||||
|
{"Mark", "Andrews", blue, getString("TableDemo.curse"), new Double(3), grapes},
|
||||||
|
{"Brian", "Beck", black, getString("TableDemo.bluesbros"), new Double(2.7182818285), raspberry},
|
||||||
|
{"Lara", "Bunni", red, getString("TableDemo.airplane"), new Double(15), strawberry},
|
||||||
|
{"Roger", "Brinkley", blue, getString("TableDemo.man"), new Double(13), peach},
|
||||||
|
{"Brent", "Christian", black, getString("TableDemo.bladerunner"), new Double(23), broccoli},
|
||||||
|
{"Mark", "Davidson", darkgreen, getString("TableDemo.brazil"), new Double(27), asparagus},
|
||||||
|
{"Jeff", "Dinkins", blue, getString("TableDemo.ladyvanishes"), new Double(8), kiwi},
|
||||||
|
{"Ewan", "Dinkins", yellow, getString("TableDemo.bugs"), new Double(2), strawberry},
|
||||||
|
{"Amy", "Fowler", violet, getString("TableDemo.reservoir"), new Double(3), raspberry},
|
||||||
|
{"Hania", "Gajewska", purple, getString("TableDemo.jules"), new Double(5), raspberry},
|
||||||
|
{"David", "Geary", blue, getString("TableDemo.pulpfiction"), new Double(3), watermelon},
|
||||||
|
// {"James", "Gosling", pink, getString("TableDemo.tennis"), new Double(21), donut},
|
||||||
|
{"Eric", "Hawkes", blue, getString("TableDemo.bladerunner"), new Double(.693), pickle},
|
||||||
|
{"Shannon", "Hickey", green, getString("TableDemo.shawshank"), new Double(2), grapes},
|
||||||
|
{"Earl", "Johnson", green, getString("TableDemo.pulpfiction"), new Double(8), carrot},
|
||||||
|
{"Robi", "Khan", green, getString("TableDemo.goodfellas"), new Double(89), apple},
|
||||||
|
{"Robert", "Kim", blue, getString("TableDemo.mohicans"), new Double(655321), strawberry},
|
||||||
|
{"Janet", "Koenig", turquoise, getString("TableDemo.lonestar"), new Double(7), peach},
|
||||||
|
{"Jeff", "Kesselman", blue, getString("TableDemo.stuntman"), new Double(17), pineapple},
|
||||||
|
{"Onno", "Kluyt", orange, getString("TableDemo.oncewest"), new Double(8), broccoli},
|
||||||
|
{"Peter", "Korn", sunpurple, getString("TableDemo.musicman"), new Double(12), sparegrass},
|
||||||
|
|
||||||
|
{"Rick", "Levenson", black, getString("TableDemo.harold"), new Double(1327), raspberry},
|
||||||
|
{"Brian", "Lichtenwalter", jfcblue, getString("TableDemo.fifthelement"), new Double(22), pear},
|
||||||
|
{"Malini", "Minasandram", beige, getString("TableDemo.joyluck"), new Double(9), corn},
|
||||||
|
{"Michael", "Martak", green, getString("TableDemo.city"), new Double(3), strawberry},
|
||||||
|
{"David", "Mendenhall", forestgreen, getString("TableDemo.schindlerslist"), new Double(7), peach},
|
||||||
|
{"Phil", "Milne", suspectpink, getString("TableDemo.withnail"), new Double(3), banana},
|
||||||
|
{"Lynn", "Monsanto", cybergreen, getString("TableDemo.dasboot"), new Double(52), peach},
|
||||||
|
{"Hans", "Muller", rustred, getString("TableDemo.eraserhead"), new Double(0), pineapple},
|
||||||
|
{"Joshua", "Outwater", blue, getString("TableDemo.labyrinth"), new Double(3), pineapple},
|
||||||
|
{"Tim", "Prinzing", blue, getString("TableDemo.firstsight"), new Double(69), pepper},
|
||||||
|
{"Raj", "Premkumar", jfcblue2, getString("TableDemo.none"), new Double(7), broccoli},
|
||||||
|
{"Howard", "Rosen", green, getString("TableDemo.defending"), new Double(7), strawberry},
|
||||||
|
{"Ray", "Ryan", black, getString("TableDemo.buckaroo"),
|
||||||
|
new Double(3.141592653589793238462643383279502884197169399375105820974944), banana},
|
||||||
|
{"Georges", "Saab", aqua, getString("TableDemo.bicycle"), new Double(290), cantaloupe},
|
||||||
|
{"Tom", "Santos", blue, getString("TableDemo.spinaltap"), new Double(241), pepper},
|
||||||
|
{"Rich", "Schiavi", blue, getString("TableDemo.repoman"), new Double(0xFF), pepper},
|
||||||
|
{"Nancy", "Schorr", green, getString("TableDemo.fifthelement"), new Double(47), watermelon},
|
||||||
|
{"Keith", "Sprochi", darkgreen, getString("TableDemo.2001"), new Double(13), watermelon},
|
||||||
|
{"Matt", "Tucker", eblue, getString("TableDemo.starwars"), new Double(2), broccoli},
|
||||||
|
{"Dmitri", "Trembovetski", red, getString("TableDemo.aliens"), new Double(222), tomato},
|
||||||
|
{"Scott", "Violet", violet, getString("TableDemo.raiders"), new Double(-97), banana},
|
||||||
|
{"Kathy", "Walrath", darkgreen, getString("TableDemo.thinman"), new Double(8), pear},
|
||||||
|
{"Nathan", "Walrath", black, getString("TableDemo.chusingura"), new Double(3), grapefruit},
|
||||||
|
{"Steve", "Wilson", green, getString("TableDemo.raiders"), new Double(7), onion},
|
||||||
|
{"Kathleen", "Zelony", gray, getString("TableDemo.dog"), new Double(13), grapes}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create a model of the data.
|
||||||
|
TableModel dataModel = new AbstractTableModel() {
|
||||||
|
public int getColumnCount() { return names.length; }
|
||||||
|
public int getRowCount() { return data.length;}
|
||||||
|
public Object getValueAt(int row, int col) {return data[row][col];}
|
||||||
|
public String getColumnName(int column) {return names[column];}
|
||||||
|
public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}
|
||||||
|
public boolean isCellEditable(int row, int col) {return col != 5;}
|
||||||
|
public void setValueAt(Object aValue, int row, int column) { data[row][column] = aValue; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Create the table
|
||||||
|
tableView = new JTable(dataModel);
|
||||||
|
TableRowSorter sorter = new TableRowSorter(dataModel);
|
||||||
|
tableView.setRowSorter(sorter);
|
||||||
|
|
||||||
|
// Show colors by rendering them in their own color.
|
||||||
|
DefaultTableCellRenderer colorRenderer = new DefaultTableCellRenderer() {
|
||||||
|
public void setValue(Object value) {
|
||||||
|
if (value instanceof NamedColor) {
|
||||||
|
NamedColor c = (NamedColor) value;
|
||||||
|
setBackground(c);
|
||||||
|
setForeground(c.getTextColor());
|
||||||
|
setText(c.toString());
|
||||||
|
} else {
|
||||||
|
super.setValue(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create a combo box to show that you can use one in a table.
|
||||||
|
JComboBox comboBox = new JComboBox();
|
||||||
|
comboBox.addItem(aqua);
|
||||||
|
comboBox.addItem(beige);
|
||||||
|
comboBox.addItem(black);
|
||||||
|
comboBox.addItem(blue);
|
||||||
|
comboBox.addItem(eblue);
|
||||||
|
comboBox.addItem(jfcblue);
|
||||||
|
comboBox.addItem(jfcblue2);
|
||||||
|
comboBox.addItem(cybergreen);
|
||||||
|
comboBox.addItem(darkgreen);
|
||||||
|
comboBox.addItem(forestgreen);
|
||||||
|
comboBox.addItem(gray);
|
||||||
|
comboBox.addItem(green);
|
||||||
|
comboBox.addItem(orange);
|
||||||
|
comboBox.addItem(purple);
|
||||||
|
comboBox.addItem(red);
|
||||||
|
comboBox.addItem(rustred);
|
||||||
|
comboBox.addItem(sunpurple);
|
||||||
|
comboBox.addItem(suspectpink);
|
||||||
|
comboBox.addItem(turquoise);
|
||||||
|
comboBox.addItem(violet);
|
||||||
|
comboBox.addItem(yellow);
|
||||||
|
|
||||||
|
TableColumn colorColumn = tableView.getColumn(getString("TableDemo.favorite_color"));
|
||||||
|
// Use the combo box as the editor in the "Favorite Color" column.
|
||||||
|
colorColumn.setCellEditor(new DefaultCellEditor(comboBox));
|
||||||
|
|
||||||
|
colorRenderer.setHorizontalAlignment(JLabel.CENTER);
|
||||||
|
colorColumn.setCellRenderer(colorRenderer);
|
||||||
|
|
||||||
|
tableView.setRowHeight(INITIAL_ROWHEIGHT);
|
||||||
|
|
||||||
|
scrollpane = new JScrollPane(tableView);
|
||||||
|
return scrollpane;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void printTable() {
|
||||||
|
MessageFormat headerFmt;
|
||||||
|
MessageFormat footerFmt;
|
||||||
|
JTable.PrintMode printMode = fitWidth.isSelected() ?
|
||||||
|
JTable.PrintMode.FIT_WIDTH :
|
||||||
|
JTable.PrintMode.NORMAL;
|
||||||
|
|
||||||
|
String text;
|
||||||
|
text = headerTextField.getText();
|
||||||
|
if (text != null && text.length() > 0) {
|
||||||
|
headerFmt = new MessageFormat(text);
|
||||||
|
} else {
|
||||||
|
headerFmt = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
text = footerTextField.getText();
|
||||||
|
if (text != null && text.length() > 0) {
|
||||||
|
footerFmt = new MessageFormat(text);
|
||||||
|
} else {
|
||||||
|
footerFmt = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
boolean status = tableView.print(printMode, headerFmt, footerFmt);
|
||||||
|
|
||||||
|
if (status) {
|
||||||
|
JOptionPane.showMessageDialog(tableView.getParent(),
|
||||||
|
getString("TableDemo.printingComplete"),
|
||||||
|
getString("TableDemo.printingResult"),
|
||||||
|
JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
} else {
|
||||||
|
JOptionPane.showMessageDialog(tableView.getParent(),
|
||||||
|
getString("TableDemo.printingCancelled"),
|
||||||
|
getString("TableDemo.printingResult"),
|
||||||
|
JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
}
|
||||||
|
} catch (PrinterException pe) {
|
||||||
|
String errorMessage = MessageFormat.format(getString("TableDemo.printingFailed"),
|
||||||
|
new Object[] {pe.getMessage()});
|
||||||
|
JOptionPane.showMessageDialog(tableView.getParent(),
|
||||||
|
errorMessage,
|
||||||
|
getString("TableDemo.printingResult"),
|
||||||
|
JOptionPane.ERROR_MESSAGE);
|
||||||
|
} catch (SecurityException se) {
|
||||||
|
String errorMessage = MessageFormat.format(getString("TableDemo.printingFailed"),
|
||||||
|
new Object[] {se.getMessage()});
|
||||||
|
JOptionPane.showMessageDialog(tableView.getParent(),
|
||||||
|
errorMessage,
|
||||||
|
getString("TableDemo.printingResult"),
|
||||||
|
JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class NamedColor extends Color {
|
||||||
|
String name;
|
||||||
|
public NamedColor(Color color, String name) {
|
||||||
|
super(color.getRGB());
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color getTextColor() {
|
||||||
|
int r = getRed();
|
||||||
|
int g = getGreen();
|
||||||
|
int b = getBlue();
|
||||||
|
if(r > 240 || g > 240) {
|
||||||
|
return Color.black;
|
||||||
|
} else {
|
||||||
|
return Color.white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ColumnLayout implements LayoutManager {
|
||||||
|
int xInset = 5;
|
||||||
|
int yInset = 5;
|
||||||
|
int yGap = 2;
|
||||||
|
|
||||||
|
public void addLayoutComponent(String s, Component c) {}
|
||||||
|
|
||||||
|
public void layoutContainer(Container c) {
|
||||||
|
Insets insets = c.getInsets();
|
||||||
|
int height = yInset + insets.top;
|
||||||
|
|
||||||
|
Component[] children = c.getComponents();
|
||||||
|
Dimension compSize = null;
|
||||||
|
for (int i = 0; i < children.length; i++) {
|
||||||
|
compSize = children[i].getPreferredSize();
|
||||||
|
children[i].setSize(compSize.width, compSize.height);
|
||||||
|
children[i].setLocation( xInset + insets.left, height);
|
||||||
|
height += compSize.height + yGap;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Dimension minimumLayoutSize(Container c) {
|
||||||
|
Insets insets = c.getInsets();
|
||||||
|
int height = yInset + insets.top;
|
||||||
|
int width = 0 + insets.left + insets.right;
|
||||||
|
|
||||||
|
Component[] children = c.getComponents();
|
||||||
|
Dimension compSize = null;
|
||||||
|
for (int i = 0; i < children.length; i++) {
|
||||||
|
compSize = children[i].getPreferredSize();
|
||||||
|
height += compSize.height + yGap;
|
||||||
|
width = Math.max(width, compSize.width + insets.left + insets.right + xInset*2);
|
||||||
|
}
|
||||||
|
height += insets.bottom;
|
||||||
|
return new Dimension( width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Dimension preferredLayoutSize(Container c) {
|
||||||
|
return minimumLayoutSize(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeLayoutComponent(Component c) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateDragEnabled(boolean dragEnabled) {
|
||||||
|
tableView.setDragEnabled(dragEnabled);
|
||||||
|
headerTextField.setDragEnabled(dragEnabled);
|
||||||
|
footerTextField.setDragEnabled(dragEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
193
src/demo/share/jfc/SwingSet2/TextAndMnemonicUtils.java
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its contributors may be used to
|
||||||
|
* endorse or promote products derived from this software without specific prior
|
||||||
|
* written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code>TextAndMnemonicUtils</code> allows to extract text and mnemonic values
|
||||||
|
* from the unified text & mnemonic strings. For example:
|
||||||
|
* LafMenu.laf.labelAndMnemonic=&Look && Feel
|
||||||
|
* The extracted text is "Look & Feel" and the extracted mnemonic mnemonic is "L".
|
||||||
|
*
|
||||||
|
* There are several patterns for the text and mnemonic suffixes which are used
|
||||||
|
* in the resource file. The patterns format is:
|
||||||
|
* (resource key -> unified text & mnemonic resource key).
|
||||||
|
*
|
||||||
|
* Keys that have label suffixes:
|
||||||
|
* (xxx_label -> xxx.labelAndMnemonic)
|
||||||
|
*
|
||||||
|
* Keys that have mnemonic suffixes:
|
||||||
|
* (xxx_mnemonic -> xxx.labelAndMnemonic)
|
||||||
|
*
|
||||||
|
* Keys that do not have definite suffixes:
|
||||||
|
* (xxx -> xxx.labelAndMnemonic)
|
||||||
|
*
|
||||||
|
* @author Alexander Scherbatiy
|
||||||
|
*/
|
||||||
|
public class TextAndMnemonicUtils {
|
||||||
|
|
||||||
|
// Label suffix for the text & mnemonic resource
|
||||||
|
private static final String LABEL_SUFFIX = ".labelAndMnemonic";
|
||||||
|
|
||||||
|
// Resource bundle for internationalized and accessible text
|
||||||
|
private static ResourceBundle bundle = null;
|
||||||
|
|
||||||
|
// Resource properties for the mnemonic key defenition
|
||||||
|
private static Properties properties = null;
|
||||||
|
|
||||||
|
static {
|
||||||
|
bundle = ResourceBundle.getBundle("resources.swingset");
|
||||||
|
properties = new Properties();
|
||||||
|
try {
|
||||||
|
properties.load(TextAndMnemonicUtils.class.getResourceAsStream("resources/swingset.properties"));
|
||||||
|
} catch (IOException ex) {
|
||||||
|
System.out.println("java.io.IOException: Couldn't load properties from: resources/swingset.properties");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns accessible and internationalized strings or mnemonics from the
|
||||||
|
* resource bundle. The key is converted to the text & mnemonic key.
|
||||||
|
*
|
||||||
|
* The following patterns are checked:
|
||||||
|
* Keys that have label suffixes:
|
||||||
|
* (xxx_label -> xxx.labelAndMnemonic)
|
||||||
|
*
|
||||||
|
* Keys that have mnemonic suffixes:
|
||||||
|
* (xxx_mnemonic -> xxx.labelAndMnemonic)
|
||||||
|
*
|
||||||
|
* Keys that do not have definite suffixes:
|
||||||
|
* (xxx -> xxx.labelAndMnemonic)
|
||||||
|
*
|
||||||
|
* Properties class is used to check if a key created for mnemonic exists.
|
||||||
|
*/
|
||||||
|
public static String getTextAndMnemonicString(String key) {
|
||||||
|
|
||||||
|
if (key.endsWith("_label")) {
|
||||||
|
String compositeKey = composeKey(key, 6, LABEL_SUFFIX);
|
||||||
|
String textAndMnemonic = bundle.getString(compositeKey);
|
||||||
|
return getTextFromTextAndMnemonic(textAndMnemonic);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key.endsWith("_mnemonic")) {
|
||||||
|
|
||||||
|
String compositeKey = composeKey(key, 9, LABEL_SUFFIX);
|
||||||
|
Object value = properties.getProperty(compositeKey);
|
||||||
|
|
||||||
|
if (value != null) {
|
||||||
|
String textAndMnemonic = bundle.getString(compositeKey);
|
||||||
|
return getMnemonicFromTextAndMnemonic(textAndMnemonic);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
String compositeKey = composeKey(key, 0, LABEL_SUFFIX);
|
||||||
|
Object value = properties.getProperty(compositeKey);
|
||||||
|
|
||||||
|
if (value != null) {
|
||||||
|
String textAndMnemonic = bundle.getString(compositeKey);
|
||||||
|
return getTextFromTextAndMnemonic(textAndMnemonic);
|
||||||
|
}
|
||||||
|
|
||||||
|
String textAndMnemonic = bundle.getString(key);
|
||||||
|
return getTextFromTextAndMnemonic(textAndMnemonic);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert the text & mnemonic string to text string
|
||||||
|
*
|
||||||
|
* The '&' symbol is treated as the mnemonic pointer
|
||||||
|
* The double "&&" symbols are treated as the single '&'
|
||||||
|
*
|
||||||
|
* For example the string "&Look && Feel" is converted to "Look & Feel"
|
||||||
|
*/
|
||||||
|
public static String getTextFromTextAndMnemonic(String text) {
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
int prevIndex = 0;
|
||||||
|
int nextIndex = text.indexOf('&');
|
||||||
|
int len = text.length();
|
||||||
|
|
||||||
|
while (nextIndex != -1) {
|
||||||
|
|
||||||
|
String s = text.substring(prevIndex, nextIndex);
|
||||||
|
sb.append(s);
|
||||||
|
|
||||||
|
nextIndex++;
|
||||||
|
|
||||||
|
if (nextIndex != len && text.charAt(nextIndex) == '&') {
|
||||||
|
sb.append('&');
|
||||||
|
nextIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
prevIndex = nextIndex;
|
||||||
|
nextIndex = text.indexOf('&', nextIndex + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.append(text.substring(prevIndex, text.length()));
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert the text & mnemonic string to mnemonic
|
||||||
|
*
|
||||||
|
* The '&' symbol is treated the mnemonic pointer
|
||||||
|
* The double "&&" symbols are treated as the single '&'
|
||||||
|
*
|
||||||
|
* For example the string "&Look && Feel" is converted to "L"
|
||||||
|
*/
|
||||||
|
public static String getMnemonicFromTextAndMnemonic(String text) {
|
||||||
|
int len = text.length();
|
||||||
|
int index = text.indexOf('&');
|
||||||
|
|
||||||
|
while (0 <= index && index < text.length() - 1) {
|
||||||
|
index++;
|
||||||
|
if (text.charAt(index) == '&') {
|
||||||
|
index = text.indexOf('&', index + 1);
|
||||||
|
} else {
|
||||||
|
char c = text.charAt(index);
|
||||||
|
return String.valueOf(Character.toUpperCase(c));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the last n characters and adds the suffix
|
||||||
|
*/
|
||||||
|
private static String composeKey(String key, int reduce, String sufix) {
|
||||||
|
return key.substring(0, key.length() - reduce) + sufix;
|
||||||
|
}
|
||||||
|
}
|
160
src/demo/share/jfc/SwingSet2/ToolTipDemo.java
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
import javax.swing.colorchooser.*;
|
||||||
|
import javax.swing.filechooser.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ToolTip Demo
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class ToolTipDemo extends DemoModule {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ToolTipDemo demo = new ToolTipDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ToolTipDemo Constructor
|
||||||
|
*/
|
||||||
|
public ToolTipDemo(SwingSet2 swingset) {
|
||||||
|
// Set the title for this demo, and an icon used to represent this
|
||||||
|
// demo inside the SwingSet2 app.
|
||||||
|
super(swingset, "ToolTipDemo", "toolbar/ToolTip.gif");
|
||||||
|
|
||||||
|
// Set the layout manager.
|
||||||
|
JPanel p = getDemoPanel();
|
||||||
|
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
|
||||||
|
p.setBackground(Color.white);
|
||||||
|
|
||||||
|
// Create a Cow to put in the center of the panel.
|
||||||
|
Cow cow = new Cow();
|
||||||
|
cow.getAccessibleContext().setAccessibleName(getString("ToolTipDemo.accessible_cow"));
|
||||||
|
|
||||||
|
// Set the tooltip text. Note, for fun, we also set more tooltip text
|
||||||
|
// descriptions for the cow down below in the Cow.contains() method.
|
||||||
|
cow.setToolTipText(getString("ToolTipDemo.cow"));
|
||||||
|
|
||||||
|
// Add the cow midway down the panel
|
||||||
|
p.add(Box.createRigidArea(new Dimension(1, 150)));
|
||||||
|
p.add(cow);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Cow extends JLabel {
|
||||||
|
Polygon cowgon = new Polygon();
|
||||||
|
|
||||||
|
public Cow() {
|
||||||
|
super(createImageIcon("tooltip/cow.gif", getString("ToolTipDemo.bessie")));
|
||||||
|
setAlignmentX(CENTER_ALIGNMENT);
|
||||||
|
|
||||||
|
// Set polygon points that define the outline of the cow.
|
||||||
|
cowgon.addPoint(3,20); cowgon.addPoint(44,4);
|
||||||
|
cowgon.addPoint(79,15); cowgon.addPoint(130,11);
|
||||||
|
cowgon.addPoint(252,5); cowgon.addPoint(181,17);
|
||||||
|
cowgon.addPoint(301,45); cowgon.addPoint(292,214);
|
||||||
|
cowgon.addPoint(269,209); cowgon.addPoint(266,142);
|
||||||
|
cowgon.addPoint(250,161); cowgon.addPoint(235,218);
|
||||||
|
cowgon.addPoint(203,206); cowgon.addPoint(215,137);
|
||||||
|
cowgon.addPoint(195,142); cowgon.addPoint(143,132);
|
||||||
|
cowgon.addPoint(133,189); cowgon.addPoint(160,200);
|
||||||
|
cowgon.addPoint(97,196); cowgon.addPoint(107,182);
|
||||||
|
cowgon.addPoint(118,185); cowgon.addPoint(110,144);
|
||||||
|
cowgon.addPoint(59,77); cowgon.addPoint(30,82);
|
||||||
|
cowgon.addPoint(30,35); cowgon.addPoint(15,36);
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean moo = false;
|
||||||
|
boolean milk = false;
|
||||||
|
boolean tail = false;
|
||||||
|
|
||||||
|
// Use the contains method to set the tooltip text depending
|
||||||
|
// on where the mouse is over the cow.
|
||||||
|
public boolean contains(int x, int y) {
|
||||||
|
if(!cowgon.contains(new Point(x, y))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((x > 30) && (x < 60) && (y > 60) && (y < 85)) {
|
||||||
|
if(!moo) {
|
||||||
|
setToolTipText("<html><center><font color=blue size=+2>" +
|
||||||
|
getString("ToolTipDemo.moo") + "</font></center></html>");
|
||||||
|
moo = true;
|
||||||
|
milk = false;
|
||||||
|
tail = false;
|
||||||
|
}
|
||||||
|
} else if((x > 150) && (x < 260) && (y > 90) && (y < 145)) {
|
||||||
|
if(!milk) {
|
||||||
|
setToolTipText("<html><center><font face=AvantGarde size=+1 color=#D2691E>" +
|
||||||
|
getString("ToolTipDemo.got_milk") + "</font></center></html>");
|
||||||
|
milk = true;
|
||||||
|
moo = false;
|
||||||
|
tail = false;
|
||||||
|
}
|
||||||
|
} else if((x > 280) && (x < 300) && (y > 20) && (y < 175)) {
|
||||||
|
if(!tail) {
|
||||||
|
setToolTipText("<html><em><b>" + getString("ToolTipDemo.tail") + "</b></em></html>");
|
||||||
|
tail = true;
|
||||||
|
moo = false;
|
||||||
|
milk = false;
|
||||||
|
}
|
||||||
|
} else if(moo || milk || tail) {
|
||||||
|
setToolTipText(getString("ToolTipDemo.tooltip_features"));
|
||||||
|
moo = false;
|
||||||
|
tail = false;
|
||||||
|
milk = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
138
src/demo/share/jfc/SwingSet2/TreeDemo.java
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* - Neither the name of Oracle nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.tree.*;
|
||||||
|
import javax.accessibility.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.beans.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.applet.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JTree Demo
|
||||||
|
*
|
||||||
|
* @author Jeff Dinkins
|
||||||
|
*/
|
||||||
|
public class TreeDemo extends DemoModule {
|
||||||
|
|
||||||
|
JTree tree;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method allows us to run as a standalone demo.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
TreeDemo demo = new TreeDemo(null);
|
||||||
|
demo.mainImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TreeDemo Constructor
|
||||||
|
*/
|
||||||
|
public TreeDemo(SwingSet2 swingset) {
|
||||||
|
// Set the title for this demo, and an icon used to represent this
|
||||||
|
// demo inside the SwingSet2 app.
|
||||||
|
super(swingset, "TreeDemo", "toolbar/JTree.gif");
|
||||||
|
|
||||||
|
getDemoPanel().add(createTree(), BorderLayout.CENTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JScrollPane createTree() {
|
||||||
|
DefaultMutableTreeNode top = new DefaultMutableTreeNode(getString("TreeDemo.music"));
|
||||||
|
DefaultMutableTreeNode catagory = null ;
|
||||||
|
DefaultMutableTreeNode artist = null;
|
||||||
|
DefaultMutableTreeNode record = null;
|
||||||
|
|
||||||
|
// open tree data
|
||||||
|
URL url = getClass().getResource("/resources/tree.txt");
|
||||||
|
|
||||||
|
try {
|
||||||
|
// convert url to buffered string
|
||||||
|
InputStream is = url.openStream();
|
||||||
|
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
|
||||||
|
BufferedReader reader = new BufferedReader(isr);
|
||||||
|
|
||||||
|
// read one line at a time, put into tree
|
||||||
|
String line = reader.readLine();
|
||||||
|
while(line != null) {
|
||||||
|
// System.out.println("reading in: ->" + line + "<-");
|
||||||
|
char linetype = line.charAt(0);
|
||||||
|
switch(linetype) {
|
||||||
|
case 'C':
|
||||||
|
catagory = new DefaultMutableTreeNode(line.substring(2));
|
||||||
|
top.add(catagory);
|
||||||
|
break;
|
||||||
|
case 'A':
|
||||||
|
if(catagory != null) {
|
||||||
|
catagory.add(artist = new DefaultMutableTreeNode(line.substring(2)));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'R':
|
||||||
|
if(artist != null) {
|
||||||
|
artist.add(record = new DefaultMutableTreeNode(line.substring(2)));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'S':
|
||||||
|
if(record != null) {
|
||||||
|
record.add(new DefaultMutableTreeNode(line.substring(2)));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
line = reader.readLine();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
tree = new JTree(top) {
|
||||||
|
public Insets getInsets() {
|
||||||
|
return new Insets(5,5,5,5);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
tree.setEditable(true);
|
||||||
|
|
||||||
|
return new JScrollPane(tree);
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateDragEnabled(boolean dragEnabled) {
|
||||||
|
tree.setDragEnabled(dragEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
121
src/demo/share/jfc/SwingSet2/resources/ant.html
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Untitled Document</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body bgcolor="#FFFFFF">
|
||||||
|
<h1 align="center"><br>
|
||||||
|
Observ. XLIX. Of an Ant or Pismire.<br>
|
||||||
|
</h1>
|
||||||
|
<p align="center"><img src="images/Octavo/ant.jpg" width="481" height="325"></p>
|
||||||
|
<p align="center"> </p>
|
||||||
|
<blockquote>
|
||||||
|
<blockquote>
|
||||||
|
<p><font size="4">This was a creature, more troublesom to be drawn, then any
|
||||||
|
of the rest, for I could not, for a good while, think of a way to make it
|
||||||
|
suffer its body to ly quiet in a natural posture; but whil'st it was alive,
|
||||||
|
if its feet were fetter'd in Wax or Glew, it would so twist and wind its body,
|
||||||
|
that I could not any wayes get a good view of it; and if I killed it, its
|
||||||
|
body was so little, that I did often spoile the shape of it, before I could
|
||||||
|
throughly view it: for this is the nature of these minute Bodies, that as
|
||||||
|
soon, almost, as ever their life is destroy'd, their parts immediately shrivel,
|
||||||
|
and lose their beauty; and so is it also with small Plants, as I instanced
|
||||||
|
before, in the description of Moss. </font></p>
|
||||||
|
<p><font size="4">And thence also is the reason of the variations in the beards
|
||||||
|
of wild Oats, and in those of Muskgrass seed, that their bodies, being exceeding
|
||||||
|
small, those small variations which are made in the surfaces of all bodies,
|
||||||
|
almost upon every change of Air, especially if the body be porous, do here
|
||||||
|
become sensible, where the whole body is so small, that it is almost nothing
|
||||||
|
but surface; for as in vegetable substances, I see no great reason to think,
|
||||||
|
that the moisture of the Aire (that, sticking to a wreath'd beard, does make
|
||||||
|
it untwist) should evaporate, or exhale away, any faster then the moisture
|
||||||
|
of other bodies, but rather that the avolation from, or access of moisture
|
||||||
|
to, the surfaces of bodies being much the same, those bodies become most
|
||||||
|
sensible of it, which have the least proportion of body to their surface.
|
||||||
|
</font></p>
|
||||||
|
<p><font size="4">So is it also with Animal substances; the dead body of an
|
||||||
|
Ant, or such little creature, does almost instantly shrivel and dry, and
|
||||||
|
your object shall be quite another thing, before you can half delineate
|
||||||
|
it, which proceeds not from the extraordinary exhalation, but from the small
|
||||||
|
proportion of body and juices, to the usual drying of bodies in the Air,
|
||||||
|
especially if warm. </font></p>
|
||||||
|
<p><font size="4">For which inconvenience, where I could not otherwise remove
|
||||||
|
it, I thought of this expedient. I took the creature, I had design'd to delineate,
|
||||||
|
and put it into a drop of very well rectified spirit of Wine, this I found
|
||||||
|
would presently dispatch, as it were, the Animal, and being taken out of
|
||||||
|
it, and lay'd on a paper,the spirit of Wine would immediately fly away,
|
||||||
|
and leave the Animal dry, in its natural posture, or at least, in a constitution,
|
||||||
|
that it might easily with a pin be plac'd, in what posture you desired to
|
||||||
|
draw it, and the limbs would so remain, without either moving, or shriveling.
|
||||||
|
</font></p>
|
||||||
|
<p><font size="4">And thus I dealt with this Ant, which I have here delineated,
|
||||||
|
which was one of many, of a very large kind, that inhabited under the Roots
|
||||||
|
of a Tree, from whence they would sally out in great parties, and make most
|
||||||
|
grievous havock of the Flowers and Fruits, in the ambient Garden, and return back
|
||||||
|
again very expertly, by the same wayes and paths they went. </font></p>
|
||||||
|
<p><font size="4">It was more then half the bigness of an Earwig, of a dark
|
||||||
|
brown, or reddish colour, with long legs, on the hinder of which it would
|
||||||
|
stand up, and raise its head as high as it could above the ground, that it
|
||||||
|
might stare the further about it, just after the same manner as I have also
|
||||||
|
observ'd a hunting Spider to do: and putting my finger towards them, they
|
||||||
|
have at first all run towards it, till almost at it; and then they would stand
|
||||||
|
round about it, at a certain distance, and smell, as it were, and consider
|
||||||
|
whether they should any of them venture any further, till one more bold then
|
||||||
|
the rest venturing to climb it, all the rest, if I would have suffered them,
|
||||||
|
would have immediately followed : much such other seemingly rational actions
|
||||||
|
I have observ'd in this little Vermine with much pleasure, which would be
|
||||||
|
too long to be here related; those that desire more of them may satisfie
|
||||||
|
their curiosity in Ligons History of the Barbadoes. </font></p>
|
||||||
|
<p><font size="4">Having insnar'd several of these into a small Box, I made
|
||||||
|
choice of the tallest grown among them, and separating it from the rest,
|
||||||
|
I gave it a Gill of Brandy, or Spirit of Wine, which after a while e'en knock'd
|
||||||
|
him down dead drunk, so that he became moveless, though at first putting
|
||||||
|
in he struggled for a pretty while very much, till at last, certain bubbles
|
||||||
|
issuing out of his mouth, it ceased to move; this (because I had before found
|
||||||
|
them quickly to recover again, if they were taken out presently) I suffered
|
||||||
|
to lye above an hour in the Spirit; and after I had taken it out, and put
|
||||||
|
its body and legs into a natural posture, remained moveless about an hour;
|
||||||
|
but then, upon a sudden, as if it had been awaken out of a drunken sleep,
|
||||||
|
it suddenly reviv'd and ran away; being caught, and serv'd as before, he
|
||||||
|
for a while continued struggling and striving, till at last there issued
|
||||||
|
several bubbles out of its mouth, and then, tanquam animam expirasset, he
|
||||||
|
remained moveless for a good while ; but at length again recovering, it was
|
||||||
|
again redipt, and suffered to lye some hours in the Spirit; notwithstanding
|
||||||
|
which, after it had layen dry some three or four hours, it again recovered
|
||||||
|
life and motion: Which kind of Experiments, if prosecuted, which they highly
|
||||||
|
deserve, seem to me of no inconsiderable use towards the invention of the
|
||||||
|
Latent Scheme, (as the Noble Ve rulam calls it) or the hidden, unknown Texture
|
||||||
|
of Bodies. </font></p>
|
||||||
|
<p><font size="4">Of what Figure this Creature appear'd through the Microscope,
|
||||||
|
the 32. Scheme (though not so carefully graven as it ought) will represent
|
||||||
|
to the eye, namely, That it had a large head A A, at the upper end of which
|
||||||
|
were two protuberant eyes, pearl'd like those of a Fly, but smaller B B;
|
||||||
|
of the Nose, or foremost part, issued two horns C C, of a shape sufficiently
|
||||||
|
differing from those of a blew Fly, though indeed they seem to be both the
|
||||||
|
same kind of Organ, and to serve for a kind of smelling; beyond these were
|
||||||
|
two indented jaws D D, which he open'd sideways, and was able to gape them
|
||||||
|
asunder very wide; and the ends of them being armed with teeth, which meeting
|
||||||
|
went between each other, it was able to grasp and hold a heavy body, three
|
||||||
|
or four times the bulk and weight of its own body: It had only six legs,
|
||||||
|
shap'd like those of a Fly, which, as I shewed before, is an Argument that
|
||||||
|
it is a winged Insect, and though I could not perceive any sign of them in
|
||||||
|
the middle part of its body (which seem'd to consist of three joints or pieces
|
||||||
|
E F G, out of which sprung two legs, yet 'tis known that there are of them
|
||||||
|
that have long wings, and fly up and down in the air. </font></p>
|
||||||
|
<p><font size="4">The third and last part of its body I I I was bigger and
|
||||||
|
larger then the other two, unto which it was joyn'd by a very small middle,
|
||||||
|
and had a kind of loose shell, or another distinct part of its body H, which
|
||||||
|
seem'd to be interpos'd, and to keep the thorax and belly from touching.
|
||||||
|
The whole body was cas'd over with a very strong armour, and the belly I
|
||||||
|
I I was covered likewise with multitudes of small white shining brisles;
|
||||||
|
the legs, horns, head, and middle parts of its body were bestruck with hairs
|
||||||
|
also, but smaller and darker. </font></p>
|
||||||
|
</blockquote>
|
||||||
|
<p> </p>
|
||||||
|
<p><a href="seaweed.html"><img src="images/htmldemo/back.jpg" width="146" height="40" align="left" border="0"></a><a href="bug.html"><img src="images/htmldemo/forward.jpg" width="196" height="40" align="right" border="0"></a></p>
|
||||||
|
<p> </p>
|
||||||
|
<p> </p>
|
||||||
|
</blockquote>
|
||||||
|
</body>
|
||||||
|
</html>
|
128
src/demo/share/jfc/SwingSet2/resources/bug.html
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Untitled Document</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body bgcolor="#FFFFFF">
|
||||||
|
<br>
|
||||||
|
<h1 align="center">Observ. LIV. Of a Louse.<br>
|
||||||
|
</h1>
|
||||||
|
<p align="center"><img src="images/Octavo/bug.jpg" width="516" height="445"></p>
|
||||||
|
<p align="center"> </p>
|
||||||
|
<blockquote>
|
||||||
|
<blockquote>
|
||||||
|
<p><font size="4">This is a Creature so officious, that 'twill be known to
|
||||||
|
every one at one time or other, so busie, and so impudent, that it will
|
||||||
|
be intruding it self in every ones company, and so proud and aspiring withall,
|
||||||
|
that it fears not to trample on the best, and affects nothing so much as
|
||||||
|
a Crown; feeds and lives very high, and that makes it so saucy, as to pull
|
||||||
|
any one by the ears that comes in its way, and will never be quiet till
|
||||||
|
it has drawn blood: it is troubled at nothing so much as at a man that scratches
|
||||||
|
his head, as knowing that man is plotting and contriving some mischief against
|
||||||
|
it, and that makes it oftentime sculk into some meaner and lower place, and
|
||||||
|
run behind a mans back, though it go very much against the hair; which ill
|
||||||
|
conditions of it having made it better known then trusted, would exempt me
|
||||||
|
from making any further description of it, did not my faithful Mercury, my
|
||||||
|
Microscope, bring me other information of it. </font></p>
|
||||||
|
<p><font size="4">For this has discovered to me, by means of a very bright light
|
||||||
|
cast on it, that it is a Creature of a very odd shape ; it has a head shap'd
|
||||||
|
like that exprest in 35. Scheme marked with A, which seems almost Conical,
|
||||||
|
but is a little flatted on the upper and under sides, at the biggest part
|
||||||
|
of which, on either side behind the head (as it were, being the place where
|
||||||
|
other Creatures ears stand) are placed its two black shining goggle eyes
|
||||||
|
B B, looking backwards, and fenced round with several small cilia or hairs
|
||||||
|
that incompass it, so that it seems this Creature has no very good foresight:
|
||||||
|
It does not seem to have any eyelids, and therefore perhaps its eyes were
|
||||||
|
so placed, that it might the better cleanse them with its forelegs; and perhaps
|
||||||
|
this may be the reason, why they so much avoid and run from the light behind
|
||||||
|
them, for being made to live in the shady and dark recesses of the hair,
|
||||||
|
and thence probably their eye having a great aperture, the open and clear
|
||||||
|
light, especially that of the Sun, must needs very much offend them; to secure
|
||||||
|
these eyes from receiving any injury from the hairs through which it passes,
|
||||||
|
it has two horns that grow before it, in the place where one would have thought
|
||||||
|
the eyes should be; each of these C C have four joynts, which are fringed,
|
||||||
|
as 'twere, with small brisles, from which to the tip of its snout D, the
|
||||||
|
head seems very round and tapering, ending in a very sharp nose D, which
|
||||||
|
seems to have a small hole, and to be the passage through which he sucks
|
||||||
|
the blood. </font></p>
|
||||||
|
<p> </p>
|
||||||
|
<p><img src="images/Octavo/bug2.jpg" width="537" height="348"></p>
|
||||||
|
<p><font size="4">Now whereas it if be plac'd on its back, with its belly
|
||||||
|
upwards, as it is in the 35. Scheme, it seems in several Positions to have
|
||||||
|
a resemblance of chaps, or jaws, as is represented in the Figure by E E,
|
||||||
|
yet in other postures those dark strokes disappear; and having kept several
|
||||||
|
of them in a box for two or three dayes, so that for all that time they had
|
||||||
|
nothing to feed on, I found, upon letting onecreep on my hand, that it immediately
|
||||||
|
fell to sucking, and did neither seem to thrust its nose very deep into the
|
||||||
|
skin, nor to open any kind of mouth, but I could plainly perceive a small
|
||||||
|
current of blood, which came directly from its snout, and past into its belly;
|
||||||
|
and about A there seem'd a contrivance, somewhat resembling a Pump, pair
|
||||||
|
of Bellows, or Heart, for by a very swift systole and diastole the blood
|
||||||
|
seem'd drawn from the nose, and forced into the body. </font></p>
|
||||||
|
<p><font size="4">It did not seem at all, though I viewed it a good while as
|
||||||
|
it was sucking, to thrust more of its nose into the skin then the very snout
|
||||||
|
D, nor did it cause the least discernable pain, and yet the blood seem'd
|
||||||
|
to run through its head very quick and freely, so that it seems there is
|
||||||
|
no part of the skin but the blood is dispers'd into, nay, even into the
|
||||||
|
cuticula; for had it thrust its whole nose in from D to C C, it would not
|
||||||
|
have amounted to the supposed thickness of that tegument, the length of
|
||||||
|
the nose being not more then a three hundredth part of an inch. </font></p>
|
||||||
|
<p><font size="4">It has six legs, covered with a very transparent shell,
|
||||||
|
and joynted exactly like a Crab's, or Lobster's; each leg is divided into
|
||||||
|
six parts by these joynts, and those have here and there several small hairs;
|
||||||
|
and at the end of each leg it has two claws, very properly adapted for its
|
||||||
|
peculiar use, being thereby inabled to walk very securely both on the skin
|
||||||
|
and hair; and indeed this contrivance of the feet is very curious, and could
|
||||||
|
not be made more commodiously and compendiously, for performing both these
|
||||||
|
requisite motions, of walking and climbing up the hair of a mans head, then
|
||||||
|
it is : for, by having the lesser claw (a) set so much short of the bigger
|
||||||
|
(b) when it walks on the skin the shorter touches not, and then the feet
|
||||||
|
are the same with those of a Mite, and several other small Insects, but by
|
||||||
|
means of the small joynts of the longer claw it can bend it round, and so
|
||||||
|
with both claws take hold of a hair, in the manner represented in the Figure,
|
||||||
|
the long transparent Cylinder F F F, being a Man's hair held by it. </font></p>
|
||||||
|
<p><font size="4">The Thorax seem'd cas'd with another kind of substance then
|
||||||
|
the belly, namely, with a thin transparent horny substance, which upon the fasting
|
||||||
|
of the Creature did not grow flaccid; through this I could plainly see the
|
||||||
|
blood, suck'd from my hand, to be variously distributed, and mov'd to and
|
||||||
|
fro; and about G there seem'd a pretty big white substance, which seem'd
|
||||||
|
to be moved within its thorax; besides, there appear'd very many small milk-white
|
||||||
|
vessels, which crost over the breast between the legs, out of which, on
|
||||||
|
either side, are many small branchings, these seem'd to be the veins and
|
||||||
|
arteries, for that which is analogus to blood in all Insects is milk-white.
|
||||||
|
</font></p>
|
||||||
|
<p><font size="4">The belly is covered with a transparent substance likewise,
|
||||||
|
but more resembling a skin then a shell, for 'tis grain'd all over the belly
|
||||||
|
just like the skin in the palms of a man's hand, and when the belly is empty,
|
||||||
|
grows very flaccid and wrinkled ; at the upper end of this is placed the
|
||||||
|
stomach H H, and perhaps also the white spot I I may be the liver, or pancreas,
|
||||||
|
which by the peristaltick motion of the guts, is a little mov'd to and fro,
|
||||||
|
not with a systole and diastole, but rather with a thronging or justling
|
||||||
|
motion. </font></p>
|
||||||
|
<p><font size="4">Viewing one of these Creatures, after it had fasted two
|
||||||
|
dayes, all the hinder part was lank and flaccid, and the white spot I I
|
||||||
|
hardly mov'd, most of the white branchings disappear'd, and most also of
|
||||||
|
the redness or sucked blood in the guts, the peristaltick motion of which
|
||||||
|
was scarce discernable; but upon the suffering it to suck, it presently
|
||||||
|
fill'd the skin of the belly, and of the six scolop'd embosments on either side,
|
||||||
|
as full as it could be stuft ; the stomach and guts were as full as they
|
||||||
|
could hold; the peristaltick motion of the gut grew quick, and the justling
|
||||||
|
motion of I I accordingly ; multitudes of milk-white vessels seem'd quickly
|
||||||
|
filled, and turgid, which were perhaps the veins and arteries, and the Creature
|
||||||
|
was so greedy, that though it could not contain more, yet it continued sucking
|
||||||
|
as fast as ever, and as fast emptying it self behind : the digestion of this
|
||||||
|
Creature must needs be very quick, for though I perceiv'd the blood thicker
|
||||||
|
and blacker when suck'd, yet, when in the guts, it was of a very lovely
|
||||||
|
ruby colour, and that part of it, which was digested into the veins, seemed
|
||||||
|
white; whence it appears, that a further digestion of blood may make it
|
||||||
|
milk, at least of a resembling colour : What is else observable in the figure
|
||||||
|
of this Creature, maybe seen by the 35. Scheme.</font></p>
|
||||||
|
</blockquote>
|
||||||
|
<p> </p>
|
||||||
|
<p><a href="ant.html"><img src="images/htmldemo/back.jpg" width="146" height="40" align="left" border="0"></a><a href="index.html"><img src="images/htmldemo/forward.jpg" width="196" height="40" align="right" border="0"></a></p>
|
||||||
|
<p> </p>
|
||||||
|
<p> </p>
|
||||||
|
</blockquote>
|
||||||
|
</body>
|
||||||
|
</html>
|
BIN
src/demo/share/jfc/SwingSet2/resources/images/About.jpg
Normal file
After Width: | Height: | Size: 90 KiB |
@ -0,0 +1,2 @@
|
|||||||
|
Images and text in the SwingSet html demo are used by permission of Octavo
|
||||||
|
Corporation and are sourced from Rare Book Room (rarebookroom.org).
|
BIN
src/demo/share/jfc/SwingSet2/resources/images/Octavo/ant.jpg
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/Octavo/book.jpg
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/Octavo/bug.jpg
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/Octavo/bug2.jpg
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/Octavo/crest.jpg
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/Octavo/king.jpg
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/Octavo/micro.jpg
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/Octavo/seaweed.jpg
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/b1.gif
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/b1d.gif
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/b1p.gif
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/b1r.gif
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/b2.gif
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/b2d.gif
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/b2p.gif
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/b2r.gif
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/b3.gif
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/b3d.gif
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/b3p.gif
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/b3r.gif
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/bl.gif
Normal file
After Width: | Height: | Size: 624 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/bldn.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/bm.gif
Normal file
After Width: | Height: | Size: 582 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/bmdn.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/br.gif
Normal file
After Width: | Height: | Size: 621 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/brdn.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/c.gif
Normal file
After Width: | Height: | Size: 204 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/cb.gif
Normal file
After Width: | Height: | Size: 1007 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/cbr.gif
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/cbrs.gif
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/cbs.gif
Normal file
After Width: | Height: | Size: 994 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/cdn.gif
Normal file
After Width: | Height: | Size: 636 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/ml.gif
Normal file
After Width: | Height: | Size: 581 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/mldn.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/mr.gif
Normal file
After Width: | Height: | Size: 374 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/mrdn.gif
Normal file
After Width: | Height: | Size: 708 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/rb.gif
Normal file
After Width: | Height: | Size: 336 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/rbp.gif
Normal file
After Width: | Height: | Size: 345 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/rbr.gif
Normal file
After Width: | Height: | Size: 703 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/rbrs.gif
Normal file
After Width: | Height: | Size: 492 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/rbs.gif
Normal file
After Width: | Height: | Size: 492 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/tl.gif
Normal file
After Width: | Height: | Size: 614 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/tldn.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/tm.gif
Normal file
After Width: | Height: | Size: 577 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/tmdn.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/toggle.gif
Normal file
After Width: | Height: | Size: 751 B |
After Width: | Height: | Size: 1.1 KiB |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/tr.gif
Normal file
After Width: | Height: | Size: 614 B |
BIN
src/demo/share/jfc/SwingSet2/resources/images/buttons/trdn.gif
Normal file
After Width: | Height: | Size: 708 B |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 1.4 KiB |