src/demo/share/jfc/SwingSet2/InternalFrameDemo.java
changeset 49495 f46bfa7a2956
equal deleted inserted replaced
49316:73da889306b7 49495:f46bfa7a2956
       
     1 /*
       
     2  *
       
     3  * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
       
     4  *
       
     5  * Redistribution and use in source and binary forms, with or without
       
     6  * modification, are permitted provided that the following conditions
       
     7  * are met:
       
     8  *
       
     9  *   - Redistributions of source code must retain the above copyright
       
    10  *     notice, this list of conditions and the following disclaimer.
       
    11  *
       
    12  *   - Redistributions in binary form must reproduce the above copyright
       
    13  *     notice, this list of conditions and the following disclaimer in the
       
    14  *     documentation and/or other materials provided with the distribution.
       
    15  *
       
    16  *   - Neither the name of Oracle nor the names of its
       
    17  *     contributors may be used to endorse or promote products derived
       
    18  *     from this software without specific prior written permission.
       
    19  *
       
    20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
       
    21  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
       
    22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       
    23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
       
    24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
       
    25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
       
    26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
       
    27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
       
    28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
       
    29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
       
    30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    31  */
       
    32 
       
    33 
       
    34 import javax.swing.*;
       
    35 import javax.swing.event.*;
       
    36 import javax.swing.text.*;
       
    37 import javax.swing.border.*;
       
    38 import javax.swing.colorchooser.*;
       
    39 import javax.swing.filechooser.*;
       
    40 import javax.accessibility.*;
       
    41 
       
    42 import java.awt.*;
       
    43 import java.awt.event.*;
       
    44 import java.beans.*;
       
    45 import java.util.*;
       
    46 import java.io.*;
       
    47 import java.applet.*;
       
    48 import java.net.*;
       
    49 
       
    50 /**
       
    51  * Internal Frames Demo
       
    52  *
       
    53  * @author Jeff Dinkins
       
    54  */
       
    55 public class InternalFrameDemo extends DemoModule {
       
    56     int windowCount = 0;
       
    57     JDesktopPane desktop = null;
       
    58 
       
    59     ImageIcon icon1, icon2, icon3, icon4;
       
    60     ImageIcon smIcon1, smIcon2, smIcon3, smIcon4;
       
    61 
       
    62     public Integer FIRST_FRAME_LAYER  = new Integer(1);
       
    63     public Integer DEMO_FRAME_LAYER   = new Integer(2);
       
    64     public Integer PALETTE_LAYER     = new Integer(3);
       
    65 
       
    66     public int FRAME0_X        = 15;
       
    67     public int FRAME0_Y        = 280;
       
    68 
       
    69     public int FRAME0_WIDTH    = 320;
       
    70     public int FRAME0_HEIGHT   = 230;
       
    71 
       
    72     public int FRAME_WIDTH     = 225;
       
    73     public int FRAME_HEIGHT    = 150;
       
    74 
       
    75     public int PALETTE_X      = 375;
       
    76     public int PALETTE_Y      = 20;
       
    77 
       
    78     public int PALETTE_WIDTH  = 260;
       
    79     public int PALETTE_HEIGHT = 260;
       
    80 
       
    81     JCheckBox windowResizable   = null;
       
    82     JCheckBox windowClosable    = null;
       
    83     JCheckBox windowIconifiable = null;
       
    84     JCheckBox windowMaximizable = null;
       
    85 
       
    86     JTextField windowTitleField = null;
       
    87     JLabel windowTitleLabel = null;
       
    88 
       
    89 
       
    90     /**
       
    91      * main method allows us to run as a standalone demo.
       
    92      */
       
    93     public static void main(String[] args) {
       
    94         InternalFrameDemo demo = new InternalFrameDemo(null);
       
    95         demo.mainImpl();
       
    96     }
       
    97 
       
    98     /**
       
    99      * InternalFrameDemo Constructor
       
   100      */
       
   101     public InternalFrameDemo(SwingSet2 swingset) {
       
   102         super(swingset, "InternalFrameDemo", "toolbar/JDesktop.gif");
       
   103 
       
   104         // preload all the icons we need for this demo
       
   105         icon1 = createImageIcon("misc/toast.gif", getString("InternalFrameDemo.toast"));
       
   106         icon2 = createImageIcon("misc/duke.gif", getString("InternalFrameDemo.duke"));
       
   107         icon3 = createImageIcon("misc/duchess.gif",  getString("InternalFrameDemo.duchess"));
       
   108         icon4 = createImageIcon("misc/cab.gif",  getString("InternalFrameDemo.cab"));
       
   109 
       
   110         smIcon1 = createImageIcon("misc/toast_small.gif", getString("InternalFrameDemo.toast"));
       
   111         smIcon2 = createImageIcon("misc/duke_small.gif", getString("InternalFrameDemo.duke"));
       
   112         smIcon3 = createImageIcon("misc/duchess_small.gif",  getString("InternalFrameDemo.duchess"));
       
   113         smIcon4 = createImageIcon("misc/cab_small.gif",  getString("InternalFrameDemo.cab"));
       
   114 
       
   115         // Create the desktop pane
       
   116         desktop = new JDesktopPane();
       
   117         getDemoPanel().add(desktop, BorderLayout.CENTER);
       
   118 
       
   119         // Create the "frame maker" palette
       
   120         createInternalFramePalette();
       
   121 
       
   122         // Create an initial internal frame to show
       
   123         JInternalFrame frame1 = createInternalFrame(icon1, FIRST_FRAME_LAYER, 1, 1);
       
   124         frame1.setBounds(FRAME0_X, FRAME0_Y, FRAME0_WIDTH, FRAME0_HEIGHT);
       
   125 
       
   126         // Create four more starter windows
       
   127         createInternalFrame(icon1, DEMO_FRAME_LAYER, FRAME_WIDTH, FRAME_HEIGHT);
       
   128         createInternalFrame(icon3, DEMO_FRAME_LAYER, FRAME_WIDTH, FRAME_HEIGHT);
       
   129         createInternalFrame(icon4, DEMO_FRAME_LAYER, FRAME_WIDTH, FRAME_HEIGHT);
       
   130         createInternalFrame(icon2, DEMO_FRAME_LAYER, FRAME_WIDTH, FRAME_HEIGHT);
       
   131     }
       
   132 
       
   133 
       
   134 
       
   135     /**
       
   136      * Create an internal frame and add a scrollable imageicon to it
       
   137      */
       
   138     public JInternalFrame createInternalFrame(Icon icon, Integer layer, int width, int height) {
       
   139         JInternalFrame jif = new JInternalFrame();
       
   140 
       
   141         if(!windowTitleField.getText().equals(getString("InternalFrameDemo.frame_label"))) {
       
   142             jif.setTitle(windowTitleField.getText() + "  ");
       
   143         } else {
       
   144             jif = new JInternalFrame(getString("InternalFrameDemo.frame_label") + " " + windowCount + "  ");
       
   145         }
       
   146 
       
   147         // set properties
       
   148         jif.setClosable(windowClosable.isSelected());
       
   149         jif.setMaximizable(windowMaximizable.isSelected());
       
   150         jif.setIconifiable(windowIconifiable.isSelected());
       
   151         jif.setResizable(windowResizable.isSelected());
       
   152 
       
   153         jif.setBounds(20*(windowCount%10), 20*(windowCount%10), width, height);
       
   154         jif.setContentPane(new ImageScroller(this, icon, 0, windowCount));
       
   155 
       
   156         windowCount++;
       
   157 
       
   158         desktop.add(jif, layer);
       
   159 
       
   160         // Set this internal frame to be selected
       
   161 
       
   162         try {
       
   163             jif.setSelected(true);
       
   164         } catch (java.beans.PropertyVetoException e2) {
       
   165         }
       
   166 
       
   167         jif.show();
       
   168 
       
   169         return jif;
       
   170     }
       
   171 
       
   172     public JInternalFrame createInternalFramePalette() {
       
   173         JInternalFrame palette = new JInternalFrame(
       
   174             getString("InternalFrameDemo.palette_label")
       
   175         );
       
   176         palette.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
       
   177         palette.getContentPane().setLayout(new BorderLayout());
       
   178         palette.setBounds(PALETTE_X, PALETTE_Y, PALETTE_WIDTH, PALETTE_HEIGHT);
       
   179         palette.setResizable(true);
       
   180         palette.setIconifiable(true);
       
   181         desktop.add(palette, PALETTE_LAYER);
       
   182 
       
   183         // *************************************
       
   184         // * Create create frame maker buttons *
       
   185         // *************************************
       
   186         JButton b1 = new JButton(smIcon1);
       
   187         JButton b2 = new JButton(smIcon2);
       
   188         JButton b3 = new JButton(smIcon3);
       
   189         JButton b4 = new JButton(smIcon4);
       
   190 
       
   191         // add frame maker actions
       
   192         b1.addActionListener(new ShowFrameAction(this, icon1));
       
   193         b2.addActionListener(new ShowFrameAction(this, icon2));
       
   194         b3.addActionListener(new ShowFrameAction(this, icon3));
       
   195         b4.addActionListener(new ShowFrameAction(this, icon4));
       
   196 
       
   197         // add frame maker buttons to panel
       
   198         JPanel p = new JPanel();
       
   199         p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
       
   200 
       
   201         JPanel buttons1 = new JPanel();
       
   202         buttons1.setLayout(new BoxLayout(buttons1, BoxLayout.X_AXIS));
       
   203 
       
   204         JPanel buttons2 = new JPanel();
       
   205         buttons2.setLayout(new BoxLayout(buttons2, BoxLayout.X_AXIS));
       
   206 
       
   207         buttons1.add(b1);
       
   208         buttons1.add(Box.createRigidArea(HGAP15));
       
   209         buttons1.add(b2);
       
   210 
       
   211         buttons2.add(b3);
       
   212         buttons2.add(Box.createRigidArea(HGAP15));
       
   213         buttons2.add(b4);
       
   214 
       
   215         p.add(Box.createRigidArea(VGAP10));
       
   216         p.add(buttons1);
       
   217         p.add(Box.createRigidArea(VGAP15));
       
   218         p.add(buttons2);
       
   219         p.add(Box.createRigidArea(VGAP10));
       
   220 
       
   221         palette.getContentPane().add(p, BorderLayout.NORTH);
       
   222 
       
   223         // ************************************
       
   224         // * Create frame property checkboxes *
       
   225         // ************************************
       
   226         p = new JPanel() {
       
   227             Insets insets = new Insets(10,15,10,5);
       
   228             public Insets getInsets() {
       
   229                 return insets;
       
   230             }
       
   231         };
       
   232         p.setLayout(new GridLayout(1,2));
       
   233 
       
   234 
       
   235         Box box = new Box(BoxLayout.Y_AXIS);
       
   236         windowResizable   = new JCheckBox(getString("InternalFrameDemo.resizable_label"), true);
       
   237         windowIconifiable = new JCheckBox(getString("InternalFrameDemo.iconifiable_label"), true);
       
   238 
       
   239         box.add(Box.createGlue());
       
   240         box.add(windowResizable);
       
   241         box.add(windowIconifiable);
       
   242         box.add(Box.createGlue());
       
   243         p.add(box);
       
   244 
       
   245         box = new Box(BoxLayout.Y_AXIS);
       
   246         windowClosable    = new JCheckBox(getString("InternalFrameDemo.closable_label"), true);
       
   247         windowMaximizable = new JCheckBox(getString("InternalFrameDemo.maximizable_label"), true);
       
   248 
       
   249         box.add(Box.createGlue());
       
   250         box.add(windowClosable);
       
   251         box.add(windowMaximizable);
       
   252         box.add(Box.createGlue());
       
   253         p.add(box);
       
   254 
       
   255         palette.getContentPane().add(p, BorderLayout.CENTER);
       
   256 
       
   257 
       
   258         // ************************************
       
   259         // *   Create Frame title textfield   *
       
   260         // ************************************
       
   261         p = new JPanel() {
       
   262             Insets insets = new Insets(0,0,10,0);
       
   263             public Insets getInsets() {
       
   264                 return insets;
       
   265             }
       
   266         };
       
   267 
       
   268         windowTitleField = new JTextField(getString("InternalFrameDemo.frame_label"));
       
   269         windowTitleLabel = new JLabel(getString("InternalFrameDemo.title_text_field_label"));
       
   270 
       
   271         p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
       
   272         p.add(Box.createRigidArea(HGAP5));
       
   273         p.add(windowTitleLabel, BorderLayout.WEST);
       
   274         p.add(Box.createRigidArea(HGAP5));
       
   275         p.add(windowTitleField, BorderLayout.CENTER);
       
   276         p.add(Box.createRigidArea(HGAP5));
       
   277 
       
   278         palette.getContentPane().add(p, BorderLayout.SOUTH);
       
   279 
       
   280         palette.show();
       
   281 
       
   282         return palette;
       
   283     }
       
   284 
       
   285 
       
   286     class ShowFrameAction extends AbstractAction {
       
   287         InternalFrameDemo demo;
       
   288         Icon icon;
       
   289 
       
   290 
       
   291         public ShowFrameAction(InternalFrameDemo demo, Icon icon) {
       
   292             this.demo = demo;
       
   293             this.icon = icon;
       
   294         }
       
   295 
       
   296         public void actionPerformed(ActionEvent e) {
       
   297             demo.createInternalFrame(icon,
       
   298                                      getDemoFrameLayer(),
       
   299                                      getFrameWidth(),
       
   300                                      getFrameHeight()
       
   301             );
       
   302         }
       
   303     }
       
   304 
       
   305     public int getFrameWidth() {
       
   306         return FRAME_WIDTH;
       
   307     }
       
   308 
       
   309     public int getFrameHeight() {
       
   310         return FRAME_HEIGHT;
       
   311     }
       
   312 
       
   313     public Integer getDemoFrameLayer() {
       
   314         return DEMO_FRAME_LAYER;
       
   315     }
       
   316 
       
   317     class ImageScroller extends JScrollPane {
       
   318 
       
   319         public ImageScroller(InternalFrameDemo demo, Icon icon, int layer, int count) {
       
   320             super();
       
   321             JPanel p = new JPanel();
       
   322             p.setBackground(Color.white);
       
   323             p.setLayout(new BorderLayout() );
       
   324 
       
   325             p.add(new JLabel(icon), BorderLayout.CENTER);
       
   326 
       
   327             getViewport().add(p);
       
   328             getHorizontalScrollBar().setUnitIncrement(10);
       
   329             getVerticalScrollBar().setUnitIncrement(10);
       
   330         }
       
   331 
       
   332         public Dimension getMinimumSize() {
       
   333             return new Dimension(25, 25);
       
   334         }
       
   335 
       
   336     }
       
   337 
       
   338     void updateDragEnabled(boolean dragEnabled) {
       
   339         windowTitleField.setDragEnabled(dragEnabled);
       
   340     }
       
   341 
       
   342 }