You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
332 lines
10 KiB
332 lines
10 KiB
12 years ago
|
/*
|
||
|
* Copyright (c) 2003 Sun Microsystems, Inc. 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.
|
||
|
*
|
||
|
* -Redistribution in binary form must reproduct 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 Sun Microsystems, Inc. or the names of contributors
|
||
|
* may be used to endorse or promote products derived from this software
|
||
|
* without specific prior written permission.
|
||
|
*
|
||
|
* This software is provided "AS IS," without a warranty of any kind. ALL
|
||
|
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
|
||
|
* ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
|
||
|
* OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT
|
||
|
* BE LIABLE FOR ANY DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT
|
||
|
* OF OR RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS
|
||
|
* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
|
||
|
* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
|
||
|
* INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
|
||
|
* OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN
|
||
|
* IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||
|
*
|
||
|
* You acknowledge that Software is not designed, licensed or intended for
|
||
|
* use in the design, construction, operation or maintenance of any nuclear
|
||
|
* facility.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* @(#)InternalFrameDemo.java 1.10 03/01/23
|
||
|
*/
|
||
|
|
||
|
|
||
|
import javax.swing.*;
|
||
|
import java.awt.*;
|
||
|
import java.awt.event.ActionEvent;
|
||
|
|
||
|
/**
|
||
|
* Internal Frames Demo
|
||
|
*
|
||
|
* @version 1.10 01/23/03
|
||
|
* @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 = 230;
|
||
|
|
||
|
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("ImageClub/misc/fish.gif", getString("InternalFrameDemo.fish"));
|
||
|
icon2 = createImageIcon("ImageClub/misc/moon.gif", getString("InternalFrameDemo.moon"));
|
||
|
icon3 = createImageIcon("ImageClub/misc/sun.gif", getString("InternalFrameDemo.sun"));
|
||
|
icon4 = createImageIcon("ImageClub/misc/cab.gif", getString("InternalFrameDemo.cab"));
|
||
|
|
||
|
smIcon1 = createImageIcon("ImageClub/misc/fish_small.gif", getString("InternalFrameDemo.fish"));
|
||
|
smIcon2 = createImageIcon("ImageClub/misc/moon_small.gif", getString("InternalFrameDemo.moon"));
|
||
|
smIcon3 = createImageIcon("ImageClub/misc/sun_small.gif", getString("InternalFrameDemo.sun"));
|
||
|
smIcon4 = createImageIcon("ImageClub/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(windowResizable);
|
||
|
box.add(windowIconifiable);
|
||
|
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(windowClosable);
|
||
|
box.add(windowMaximizable);
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|