SplitPaneDemo.java revision 13978:1993af50385d
16059Samurai/* 26059Samurai * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. 36059Samurai * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 46059Samurai * 56059Samurai * This code is free software; you can redistribute it and/or modify it 66059Samurai * under the terms of the GNU General Public License version 2 only, as 76059Samurai * published by the Free Software Foundation. 86059Samurai * 96059Samurai * This code is distributed in the hope that it will be useful, but WITHOUT 106059Samurai * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 116059Samurai * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 126059Samurai * version 2 for more details (a copy is included in the LICENSE file that 136059Samurai * accompanied this code). 146059Samurai * 156059Samurai * You should have received a copy of the GNU General Public License version 166059Samurai * 2 along with this work; if not, write to the Free Software Foundation, 176059Samurai * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 186059Samurai * 198857Srgrimes * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2031828Sbrian * or visit www.oracle.com if you need additional information or have any 218857Srgrimes * questions. 226059Samurai */ 2330715Sbrianpackage com.sun.swingset3.demos.splitpane; 2430715Sbrian 2526031Sbrianimport java.awt.BorderLayout; 2630715Sbrianimport java.awt.Color; 2726031Sbrianimport java.awt.Dimension; 2830715Sbrianimport java.awt.GridBagConstraints; 2926031Sbrianimport java.awt.GridBagLayout; 3030715Sbrianimport java.awt.Insets; 3130715Sbrianimport java.awt.event.ActionEvent; 3231343Sbrianimport java.awt.event.ActionListener; 3326031Sbrianimport javax.swing.*; 3431343Sbrianimport javax.swing.event.ChangeEvent; 3530715Sbrianimport javax.swing.event.ChangeListener; 3630715Sbrian 3726516Sbrianimport com.sun.swingset3.DemoProperties; 3830715Sbrianimport com.sun.swingset3.demos.ResourceManager; 3930715Sbrian 4030715Sbrian/** 4130715Sbrian * Split Pane demo 4230715Sbrian * 4330715Sbrian * @version 1.12 11/17/05 4430715Sbrian * @author Scott Violet 4530715Sbrian * @author Jeff Dinkins 4630715Sbrian */ 4730715Sbrian@DemoProperties( 4831343Sbrian value = "JSplitPane Demo", 4930715Sbrian category = "Containers", 5030715Sbrian description = "Demonstrates JSplitPane, a container which lays out two components in an adjustable split view (horizontal or vertical)", 5130715Sbrian sourceFiles = { 5230715Sbrian "com/sun/swingset3/demos/splitpane/SplitPaneDemo.java", 536059Samurai "com/sun/swingset3/demos/ResourceManager.java", 546059Samurai "com/sun/swingset3/demos/splitpane/resources/SplitPaneDemo.properties", 556059Samurai "com/sun/swingset3/demos/splitpane/resources/images/day.jpg", 5631690Sbrian "com/sun/swingset3/demos/splitpane/resources/images/night.jpg", 576059Samurai "com/sun/swingset3/demos/splitpane/resources/images/SplitPaneDemo.gif" 586059Samurai } 5913389Sphk) 6031343Sbrianpublic class SplitPaneDemo extends JPanel { 6126031Sbrian 6231343Sbrian private static final ResourceManager resourceManager = new ResourceManager(SplitPaneDemo.class); 636059Samurai public static final String VERTICAL_SPLIT = resourceManager.getString("SplitPaneDemo.vert_split"); 6426142Sbrian public static final String HORIZONTAL_SPLIT = resourceManager.getString("SplitPaneDemo.horz_split"); 656059Samurai public static final String ONE_TOUCH_EXPANDABLE = resourceManager.getString("SplitPaneDemo.one_touch_expandable"); 6625630Sbrian public static final String SECOND_COMPONENT_MIN_SIZE = resourceManager.getString("SplitPaneDemo.second_component_min_size"); 6725630Sbrian public static final String FIRST_COMPONENT_MIN_SIZE = resourceManager.getString("SplitPaneDemo.first_component_min_size"); 686059Samurai public static final String DIVIDER_SIZE = resourceManager.getString("SplitPaneDemo.divider_size"); 6926940Sbrian public static final String DEMO_TITLE = SplitPaneDemo.class.getAnnotation(DemoProperties.class).value(); 7030715Sbrian 7130715Sbrian private static final Insets insets = new Insets(4, 8, 4, 8); 7230715Sbrian 7330733Sbrian private final JSplitPane splitPane; 7430715Sbrian private final JLabel day; 7531080Sbrian private final JLabel night; 766059Samurai 776059Samurai private JPanel controlPanel; 7831822Sbrian private GridBagLayout gridbag; 796059Samurai private GridBagConstraints c; 8031343Sbrian 8131343Sbrian /** 8231343Sbrian * main method allows us to run as a standalone demo. 8331343Sbrian * 8431343Sbrian * @param args 8531343Sbrian */ 8631343Sbrian public static void main(String[] args) { 8731343Sbrian JFrame frame = new JFrame(DEMO_TITLE); 8831343Sbrian 8931343Sbrian frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 9031343Sbrian frame.getContentPane().add(new SplitPaneDemo()); 9131343Sbrian frame.setPreferredSize(new Dimension(800, 600)); 9231343Sbrian frame.pack(); 9331343Sbrian frame.setLocationRelativeTo(null); 9431343Sbrian frame.setVisible(true); 9531343Sbrian } 9631343Sbrian 976059Samurai /** 986059Samurai * SplitPaneDemo Constructor 9931343Sbrian */ 1006059Samurai public SplitPaneDemo() { 10128679Sbrian setLayout(new BorderLayout()); 10231372Sbrian 1036059Samurai //<snip>Create horizontal SplitPane with day and night 10426516Sbrian day = new JLabel(resourceManager.createImageIcon("day.jpg", 10526516Sbrian resourceManager.getString("SplitPaneDemo.day"))); 10626516Sbrian night = new JLabel(resourceManager.createImageIcon("night.jpg", 10731343Sbrian resourceManager.getString("SplitPaneDemo.night"))); 10831343Sbrian 10931372Sbrian splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, day, night); 11031372Sbrian //</snip> 11128679Sbrian 11228679Sbrian //<snip>Turn on continuous layout 1136059Samurai splitPane.setContinuousLayout(true); 11426516Sbrian //</snip> 1156059Samurai 11631372Sbrian //<snip>Turn on one-touch expansion 11731372Sbrian splitPane.setOneTouchExpandable(true); 11831372Sbrian //</snip> 11931372Sbrian 12031372Sbrian //<snip>Set divider location 12131372Sbrian splitPane.setDividerLocation(200); 12231372Sbrian //</snip> 12331372Sbrian 12431372Sbrian //<snip>Set minimum size for each child 12531372Sbrian day.setMinimumSize(new Dimension(20, 20)); 1266059Samurai night.setMinimumSize(new Dimension(20, 20)); 12731343Sbrian //</snip> 1286764Samurai 12931372Sbrian add(splitPane, BorderLayout.CENTER); 13031372Sbrian setBackground(Color.black); 13131372Sbrian 13231372Sbrian add(createSplitPaneControls(), BorderLayout.SOUTH); 1336059Samurai } 13431372Sbrian 13526516Sbrian /** 13626516Sbrian * Creates controls to alter the JSplitPane. 13726516Sbrian * 1386059Samurai * @return 1396059Samurai */ 1406059Samurai protected final JPanel createSplitPaneControls() { 14130913Sbrian 1426059Samurai gridbag = new GridBagLayout(); 14331343Sbrian c = new GridBagConstraints(); 1446059Samurai controlPanel = new JPanel(gridbag); 14520120Snate 14620120Snate //<snip>Create radio box to edit splitpane orientation 14725908Sbrian Box box = Box.createHorizontalBox(); 14825908Sbrian ButtonGroup group = new ButtonGroup(); 14920120Snate 15010528Samurai OrientationListener orientationListener = new OrientationListener(); 1516059Samurai 15210528Samurai JRadioButton button = new JRadioButton(VERTICAL_SPLIT); 1536059Samurai button.setActionCommand("vertical"); 15410528Samurai button.addActionListener(orientationListener); 1556059Samurai group.add(button); 15630913Sbrian box.add(button); 15726516Sbrian 15826516Sbrian button = new JRadioButton(HORIZONTAL_SPLIT); 1596059Samurai button.setActionCommand("horizontal"); 16026516Sbrian button.setSelected(true); 1616059Samurai button.addActionListener(orientationListener); 1626059Samurai group.add(button); 1636059Samurai box.add(button); 16431343Sbrian //</snip> 1656059Samurai 16611336Samurai addToGridbag(box, 0, 0, 1, 1, 16726858Sbrian GridBagConstraints.NONE, GridBagConstraints.WEST); 16811336Samurai 1696059Samurai //<snip>Create checkbox to edit continuous layout 17026516Sbrian JCheckBox checkBox = new JCheckBox(resourceManager.getString("SplitPaneDemo.cont_layout")); 17126516Sbrian checkBox.setSelected(true); 17226516Sbrian 1736059Samurai checkBox.addChangeListener((ChangeEvent e) -> { 17426516Sbrian splitPane.setContinuousLayout( 17531343Sbrian ((JCheckBox) e.getSource()).isSelected()); 17631140Sbrian }); 17731121Sbrian //</snip> 17811336Samurai 17911336Samurai c.gridy++; 18026516Sbrian addToGridbag(checkBox, 0, 1, 1, 1, 18126516Sbrian GridBagConstraints.NONE, GridBagConstraints.WEST); 18231034Sbrian 18326516Sbrian //<snip>Create checkbox to edit one-touch-expandable 18428679Sbrian checkBox = new JCheckBox(ONE_TOUCH_EXPANDABLE); 18511336Samurai checkBox.setSelected(true); 18611336Samurai 18726858Sbrian checkBox.addChangeListener((ChangeEvent e) -> { 18830697Sbrian splitPane.setOneTouchExpandable( 18931343Sbrian ((JCheckBox) e.getSource()).isSelected()); 19011336Samurai }); 19111336Samurai //</snip> 19226858Sbrian 19326858Sbrian addToGridbag(checkBox, 0, 2, 1, 1, 19411336Samurai GridBagConstraints.NONE, GridBagConstraints.WEST); 19526516Sbrian 19626516Sbrian JSeparator separator = new JSeparator(JSeparator.VERTICAL); 1976059Samurai addToGridbag(separator, 1, 0, 1, 3, 1986059Samurai GridBagConstraints.VERTICAL, GridBagConstraints.CENTER); 19910528Samurai 20031343Sbrian //<snip>Create spinner to edit divider size 20128536Sbrian final JSpinner spinner = new JSpinner( 20231343Sbrian new SpinnerNumberModel(splitPane.getDividerSize(), 5, 50, 2)); 20331343Sbrian 20428536Sbrian spinner.addChangeListener((ChangeEvent event) -> { 20531141Sbrian SpinnerNumberModel model = (SpinnerNumberModel) spinner.getModel(); 20631141Sbrian splitPane.setDividerSize(model.getNumber().intValue()); 20731343Sbrian }); 20828536Sbrian //</snip> 20931141Sbrian 21031141Sbrian JLabel label = new JLabel(DIVIDER_SIZE); 21128536Sbrian label.setLabelFor(spinner); 21228536Sbrian addToGridbag(label, 2, 0, 1, 1, 21328536Sbrian GridBagConstraints.NONE, GridBagConstraints.EAST); 21428536Sbrian addToGridbag(spinner, 3, 0, 1, 1, 21531343Sbrian GridBagConstraints.NONE, GridBagConstraints.WEST); 21610528Samurai 21710528Samurai //<snip>Create spinners to edit day & night's minimum sizes 21810528Samurai JSpinner minSizeSpinner = new JSpinner( 21926516Sbrian new SpinnerNumberModel(day.getMinimumSize().width, 0, 300, 10)); 22031343Sbrian 22131343Sbrian minSizeSpinner.addChangeListener(new MinimumSizeListener(day)); 22220813Sjkh //</snip> 22318856Ssos 22426911Sbrian label = new JLabel(FIRST_COMPONENT_MIN_SIZE); 22526516Sbrian label.setLabelFor(minSizeSpinner); 22626516Sbrian addToGridbag(label, 2, 1, 1, 1, 22726516Sbrian GridBagConstraints.NONE, GridBagConstraints.EAST); 22810528Samurai addToGridbag(minSizeSpinner, 3, 1, 1, 1, 22926911Sbrian GridBagConstraints.NONE, GridBagConstraints.WEST); 23026911Sbrian 23128679Sbrian //<snip>Create spinners to edit day & night's minimum sizes 23226911Sbrian minSizeSpinner = new JSpinner( 23328679Sbrian new SpinnerNumberModel(night.getMinimumSize().width, 0, 300, 10)); 23428679Sbrian 23526911Sbrian minSizeSpinner.addChangeListener(new MinimumSizeListener(night)); 23631121Sbrian //</snip> 23728679Sbrian 23826516Sbrian label = new JLabel(SECOND_COMPONENT_MIN_SIZE); 23926516Sbrian label.setLabelFor(minSizeSpinner); 24026516Sbrian addToGridbag(label, 2, 2, 1, 1, 24126516Sbrian GridBagConstraints.NONE, GridBagConstraints.EAST); 24231343Sbrian addToGridbag(minSizeSpinner, 3, 2, 1, 1, 24328381Sbrian GridBagConstraints.NONE, GridBagConstraints.WEST); 24431121Sbrian 24531121Sbrian return controlPanel; 24631121Sbrian } 24731121Sbrian 24831121Sbrian protected void addToGridbag(JComponent child, int gx, int gy, 24931121Sbrian int gwidth, int gheight, int fill, int anchor) { 25028381Sbrian c.insets = insets; 25128381Sbrian c.gridx = gx; 25228381Sbrian c.gridy = gy; 25328679Sbrian c.gridwidth = gwidth; 25428381Sbrian c.gridheight = gheight; 25528381Sbrian c.fill = fill; 25628679Sbrian c.anchor = anchor; 25726516Sbrian gridbag.addLayoutComponent(child, c); 25826516Sbrian controlPanel.add(child); 25928679Sbrian 26028679Sbrian } 26118531Sbde 26228679Sbrian //<snip>Create radio box to edit splitpane orientation 26328679Sbrian private class OrientationListener implements ActionListener { 26428679Sbrian 26528679Sbrian @Override 26628679Sbrian public void actionPerformed(ActionEvent event) { 26728679Sbrian splitPane.setOrientation(event.getActionCommand().equals("vertical") 26828679Sbrian ? JSplitPane.VERTICAL_SPLIT : JSplitPane.HORIZONTAL_SPLIT); 26928679Sbrian } 27026516Sbrian 27128679Sbrian } 27228679Sbrian //</snip> 27328679Sbrian 27428679Sbrian //<snip>Create spinners to edit day & night's minimum sizes 27528679Sbrian public class MinimumSizeListener implements ChangeListener { 27628679Sbrian 27728679Sbrian private final JComponent component; 27828679Sbrian 27926516Sbrian public MinimumSizeListener(JComponent c) { 28028679Sbrian this.component = c; 28131343Sbrian } 28226516Sbrian 28328679Sbrian @Override 28431061Sbrian public void stateChanged(ChangeEvent event) { 28531343Sbrian JSpinner spinner = (JSpinner) event.getSource(); 28628679Sbrian SpinnerNumberModel model = (SpinnerNumberModel) spinner.getModel(); 28731343Sbrian int min = model.getNumber().intValue(); 28831343Sbrian component.setMinimumSize(new Dimension(min, min)); 28931343Sbrian } 29031343Sbrian } 29131343Sbrian //</snip> 29231343Sbrian} 29331343Sbrian