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