/* * * 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 = Integer.valueOf(1); public Integer DEMO_FRAME_LAYER = Integer.valueOf(2); public Integer PALETTE_LAYER = Integer.valueOf(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); } }