home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / VCAFE.3.0A / Sample.bin / MetalworksDocumentFrame.java < prev    next >
Text File  |  1998-06-30  |  5KB  |  175 lines

  1. /*
  2.  * @(#)MetalworksDocumentFrame.java    1.3 98/03/06
  3.  * 
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  */
  20.  
  21. import java.awt.*;
  22. import java.awt.event.*;
  23. import java.util.*;
  24. import com.sun.java.swing.*;
  25. import com.sun.java.swing.border.*;
  26.  
  27.  
  28. /**
  29.   * This is a subclass of JInternalFrame which displays documents.
  30.   *
  31.   * @version 1.3 03/06/98
  32.   * @author Steve Wilson
  33.   */
  34. public class MetalworksDocumentFrame extends JInternalFrame {
  35.   
  36.     static int openFrameCount = 0;
  37.     static final int offset = 30;
  38.  
  39.     public MetalworksDocumentFrame() {
  40.     super("", true, true, true, true);
  41.     openFrameCount++;
  42.         setTitle("Untitled Message " + openFrameCount);
  43.  
  44.     JPanel top = new JPanel();
  45.     top.setBorder(new EmptyBorder(10, 10, 10, 10));
  46.     top.setLayout(new BorderLayout());
  47.     top.add(buildAddressPanel(), BorderLayout.NORTH);
  48.  
  49.     JTextArea content = new JTextArea( 15, 30 );
  50.     content.setBorder( new EmptyBorder(0,5 ,0, 5) );
  51.     content.setLineWrap(true);
  52.  
  53.  
  54.  
  55.     JScrollPane textScroller = new JScrollPane(content, 
  56.                            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
  57.                            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
  58.     top.add( textScroller, BorderLayout.CENTER);
  59.     
  60.  
  61.     setContentPane(top);
  62.     pack();
  63.     setLocation( offset * openFrameCount, offset *openFrameCount);
  64.  
  65.     }
  66.  
  67.     private JPanel buildAddressPanel() {
  68.         JPanel p = new JPanel();
  69.     p.setLayout( new LabeledPairLayout() );
  70.     
  71.  
  72.     JLabel toLabel = new JLabel("To: ", JLabel.RIGHT);
  73.     JTextField toField = new JTextField(25);
  74.     p.add(toLabel, "label");
  75.     p.add(toField, "field");
  76.  
  77.  
  78.     JLabel subLabel = new JLabel("Subj: ", JLabel.RIGHT);
  79.     JTextField subField = new JTextField(25);
  80.     p.add(subLabel, "label");
  81.     p.add(subField, "field");
  82.  
  83.  
  84.     JLabel ccLabel = new JLabel("cc: ", JLabel.RIGHT);
  85.     JTextField ccField = new JTextField(25);
  86.     p.add(ccLabel, "label");
  87.     p.add(ccField, "field");
  88.  
  89.     return p;
  90.  
  91.     }
  92.  
  93.     class LabeledPairLayout implements LayoutManager {
  94.  
  95.       Vector labels = new Vector();
  96.       Vector fields = new Vector();
  97.       
  98.       int yGap = 2;
  99.       int xGap = 2;
  100.  
  101.       public void addLayoutComponent(String s, Component c) {
  102.       if (s.equals("label")) {
  103.           labels.addElement(c);
  104.       }  else {
  105.           fields.addElement(c);
  106.       }
  107.       }
  108.  
  109.       public void layoutContainer(Container c) {
  110.       Insets insets = c.getInsets();
  111.       
  112.       int labelWidth = 0;
  113.       Enumeration labelIter = labels.elements();
  114.       while(labelIter.hasMoreElements()) {
  115.           JComponent comp = (JComponent)labelIter.nextElement();
  116.           labelWidth = Math.max( labelWidth, comp.getPreferredSize().width );
  117.       }
  118.  
  119.       int yPos = insets.top;
  120.  
  121.       Enumeration fieldIter = fields.elements();
  122.       labelIter = labels.elements();
  123.       while(labelIter.hasMoreElements() && fieldIter.hasMoreElements()) {
  124.           JComponent label = (JComponent)labelIter.nextElement();
  125.           JComponent field = (JComponent)fieldIter.nextElement();
  126.           int height = Math.max(label.getPreferredSize().height, field.getPreferredSize().height);
  127.           label.setBounds( insets.left, yPos, labelWidth, height ); 
  128.           field.setBounds( insets.left + labelWidth + xGap, 
  129.                  yPos, 
  130.                  c.getSize().width - (labelWidth +xGap + insets.left + insets.right), 
  131.                  height ); 
  132.           yPos += (height + yGap);
  133.       }
  134.       
  135.       }
  136.  
  137.  
  138.       public Dimension minimumLayoutSize(Container c) {
  139.       Insets insets = c.getInsets();
  140.       
  141.       int labelWidth = 0;
  142.       Enumeration labelIter = labels.elements();
  143.       while(labelIter.hasMoreElements()) {
  144.           JComponent comp = (JComponent)labelIter.nextElement();
  145.           labelWidth = Math.max( labelWidth, comp.getPreferredSize().width );
  146.       }
  147.  
  148.       int yPos = insets.top;
  149.  
  150.       labelIter = labels.elements();
  151.       Enumeration fieldIter = fields.elements();
  152.       while(labelIter.hasMoreElements() && fieldIter.hasMoreElements()) {
  153.           JComponent label = (JComponent)labelIter.nextElement();
  154.           JComponent field = (JComponent)fieldIter.nextElement();
  155.           int height = Math.max(label.getPreferredSize().height, field.getPreferredSize().height);
  156.           yPos += (height + yGap);
  157.       }
  158.       return new Dimension( labelWidth * 3 , yPos );
  159.       }
  160.   
  161.       public Dimension preferredLayoutSize(Container c) {
  162.       Dimension d = minimumLayoutSize(c);
  163.       d.width *= 2;
  164.           return d;
  165.       }
  166.    
  167.       public void removeLayoutComponent(Component c) {}
  168.  
  169. }
  170.  
  171.  
  172. }
  173.  
  174.  
  175.