Mega Code Archive

 
Categories / Java Tutorial / Swing
 

Demonstrates how to fix common alignment problems

/*  *  * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.  *  * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,  * modify and redistribute this software in source and binary code form,  * provided that i) this copyright notice and license appear on all copies of  * the software; and ii) Licensee does not utilize the software in a manner  * which is disparaging to Sun.  *  * This software is provided "AS IS," without a warranty of any kind. ALL  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY  * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR  * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE  * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING  * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS  * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,  * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF  * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE  * POSSIBILITY OF SUCH DAMAGES.  *  * This software is not designed or intended for use in on-line control of  * aircraft, air traffic, aircraft navigation or aircraft communications; or in  * the design, construction, operation or maintenance of any nuclear  * facility. Licensee represents and warrants that it will not use or  * redistribute the Software for such purposes.  */ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import javax.swing.AbstractButton; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.border.LineBorder; import javax.swing.border.TitledBorder; public class BoxAlignmentDemo extends JPanel {   public BoxAlignmentDemo() {     super(new BorderLayout());     JTabbedPane tabbedPane = new JTabbedPane();     JPanel buttonRow = new JPanel();     // Use default FlowLayout.     buttonRow.add(createButtonRow(false));     buttonRow.add(createButtonRow(true));     tabbedPane.addTab("Altering alignments", buttonRow);     JPanel labelAndComponent = new JPanel();     // Use default FlowLayout.     labelAndComponent.add(createLabelAndComponent(false));     labelAndComponent.add(createLabelAndComponent(true));     tabbedPane.addTab("X alignment mismatch", labelAndComponent);     JPanel buttonAndComponent = new JPanel();     // Use default FlowLayout.     buttonAndComponent.add(createYAlignmentExample(false));     buttonAndComponent.add(createYAlignmentExample(true));     tabbedPane.addTab("Y alignment mismatch", buttonAndComponent);     // Add tabbedPane to this panel.     add(tabbedPane, BorderLayout.CENTER);   }   protected JPanel createButtonRow(boolean changeAlignment) {     JButton button1 = new JButton("A JButton", createImageIcon("images/middle.gif"));     button1.setVerticalTextPosition(AbstractButton.BOTTOM);     button1.setHorizontalTextPosition(AbstractButton.CENTER);     JButton button2 = new JButton("Another JButton", createImageIcon("images/geek-cght.gif"));     button2.setVerticalTextPosition(AbstractButton.BOTTOM);     button2.setHorizontalTextPosition(AbstractButton.CENTER);     String title;     if (changeAlignment) {       title = "Desired";       button1.setAlignmentY(BOTTOM_ALIGNMENT);       button2.setAlignmentY(BOTTOM_ALIGNMENT);     } else {       title = "Default";     }     JPanel pane = new JPanel();     pane.setBorder(BorderFactory.createTitledBorder(title));     pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS));     pane.add(button1);     pane.add(button2);     return pane;   }   protected JPanel createLabelAndComponent(boolean doItRight) {     JPanel pane = new JPanel();     JComponent component = new JPanel();     Dimension size = new Dimension(150, 100);     component.setMaximumSize(size);     component.setPreferredSize(size);     component.setMinimumSize(size);     TitledBorder border = new TitledBorder(new LineBorder(Color.black), "A JPanel",         TitledBorder.CENTER, TitledBorder.BELOW_TOP);     border.setTitleColor(Color.black);     component.setBorder(border);     JLabel label = new JLabel("This is a JLabel");     String title;     if (doItRight) {       title = "Matched";       label.setAlignmentX(CENTER_ALIGNMENT);     } else {       title = "Mismatched";     }     pane.setBorder(BorderFactory.createTitledBorder(title));     pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));     pane.add(label);     pane.add(component);     return pane;   }   protected JPanel createYAlignmentExample(boolean doItRight) {     JPanel pane = new JPanel();     String title;     JComponent component1 = new JPanel();     Dimension size = new Dimension(100, 50);     component1.setMaximumSize(size);     component1.setPreferredSize(size);     component1.setMinimumSize(size);     TitledBorder border = new TitledBorder(new LineBorder(Color.black), "A JPanel",         TitledBorder.CENTER, TitledBorder.BELOW_TOP);     border.setTitleColor(Color.black);     component1.setBorder(border);     JComponent component2 = new JPanel();     size = new Dimension(100, 50);     component2.setMaximumSize(size);     component2.setPreferredSize(size);     component2.setMinimumSize(size);     border = new TitledBorder(new LineBorder(Color.black), "A JPanel", TitledBorder.CENTER,         TitledBorder.BELOW_TOP);     border.setTitleColor(Color.black);     component2.setBorder(border);     if (doItRight) {       title = "Matched";     } else {       component1.setAlignmentY(TOP_ALIGNMENT);       title = "Mismatched";     }     pane.setBorder(BorderFactory.createTitledBorder(title));     pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS));     pane.add(component1);     pane.add(component2);     return pane;   }   /** Returns an ImageIcon, or null if the path was invalid. */   protected static ImageIcon createImageIcon(String path) {     java.net.URL imgURL = BoxAlignmentDemo.class.getResource(path);     if (imgURL != null) {       return new ImageIcon(imgURL);     } else {       System.err.println("Couldn't find file: " + path);       return null;     }   }   /**    * Create the GUI and show it. For thread safety, this method should be    * invoked from the event-dispatching thread.    */   private static void createAndShowGUI() {     // Create and set up the window.     JFrame frame = new JFrame("BoxAlignmentDemo");     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // Create and set up the content pane.     BoxAlignmentDemo newContentPane = new BoxAlignmentDemo();     newContentPane.setOpaque(true); // content panes must be opaque     frame.setContentPane(newContentPane);     // Display the window.     frame.pack();     frame.setVisible(true);   }   public static void main(String[] args) {     // Schedule a job for the event-dispatching thread:     // creating and showing this application's GUI.     javax.swing.SwingUtilities.invokeLater(new Runnable() {       public void run() {         createAndShowGUI();       }     });   } }