diff -r 73da889306b7 -r f46bfa7a2956 src/demo/share/jfc/SwingSet2/InternalFrameDemo.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/demo/share/jfc/SwingSet2/InternalFrameDemo.java Fri Mar 23 13:43:39 2018 -0700 @@ -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); + } + +}