| /* | |
| * | |
| * Copyright (c) 2007, 2023, 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.AbstractAction; | |
| import javax.swing.Box; | |
| import javax.swing.BoxLayout; | |
| import javax.swing.Icon; | |
| import javax.swing.ImageIcon; | |
| import javax.swing.JButton; | |
| import javax.swing.JCheckBox; | |
| import javax.swing.JDesktopPane; | |
| import javax.swing.JInternalFrame; | |
| import javax.swing.JLabel; | |
| import javax.swing.JPanel; | |
| import javax.swing.JScrollPane; | |
| import javax.swing.JTextField; | |
| import java.awt.BorderLayout; | |
| import java.awt.Color; | |
| import java.awt.Dimension; | |
| import java.awt.GridLayout; | |
| import java.awt.Insets; | |
| import java.awt.event.ActionEvent; | |
| /** | |
| * 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")); | |
| windowTitleLabel.setLabelFor(windowTitleField); | |
| 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); | |
| } | |
| } |