home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / inprise / JSAMPLES.Z / IntegerSpinItemEditor.java < prev    next >
Text File  |  1998-05-08  |  8KB  |  251 lines

  1. /*
  2.  * Copyright (c) 1997-1998 Borland International, Inc. All Rights Reserved.
  3.  * 
  4.  * This SOURCE CODE FILE, which has been provided by Borland as part
  5.  * of a Borland product for use ONLY by licensed users of the product,
  6.  * includes CONFIDENTIAL and PROPRIETARY information of Borland.  
  7.  *
  8.  * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS 
  9.  * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH
  10.  * THE PRODUCT.
  11.  *
  12.  * IN PARTICULAR, YOU WILL INDEMNIFY AND HOLD BORLAND, ITS RELATED
  13.  * COMPANIES AND ITS SUPPLIERS, HARMLESS FROM AND AGAINST ANY CLAIMS
  14.  * OR LIABILITIES ARISING OUT OF THE USE, REPRODUCTION, OR DISTRIBUTION
  15.  * OF YOUR PROGRAMS, INCLUDING ANY CLAIMS OR LIABILITIES ARISING OUT OF
  16.  * OR RESULTING FROM THE USE, MODIFICATION, OR DISTRIBUTION OF PROGRAMS
  17.  * OR FILES CREATED FROM, BASED ON, AND/OR DERIVED FROM THIS SOURCE
  18.  * CODE FILE.
  19.  */
  20. package borland.samples.intl.beans;
  21.  
  22. import java.awt.*;
  23. import java.awt.event.*;
  24. import java.util.*;
  25. import borland.jbcl.util.*;
  26. import borland.jbcl.view.*;
  27. import borland.jbcl.control.*;
  28. import borland.jbcl.model.*;
  29.  
  30. public class IntegerSpinItemEditor extends Panel implements ItemEditor, BlackBox {
  31.   private Scrollbar scrollbar1 = new Scrollbar();
  32.   private MaskableTextItemEditor maskableTextItemEditor1 = new MaskableTextItemEditor();
  33.  
  34.   private int initial;
  35.   private int minimum;
  36.   private int maximum;
  37.   private int increment;
  38.  
  39.   public IntegerSpinItemEditor() {
  40.     this(1);
  41.   }
  42.  
  43.   public IntegerSpinItemEditor(int initial) {
  44.     this(initial, 1, 100);
  45.   }
  46.  
  47.   public IntegerSpinItemEditor(int initial, int minimum, int maximum) {
  48.     this(initial, minimum, maximum, 1);
  49.   }
  50.  
  51.   public IntegerSpinItemEditor(int initial, int minimum, int maximum, int increment) {
  52.     this.initial = initial;
  53.     this.minimum = minimum;
  54.     this.maximum = maximum;
  55.     this.increment = increment;
  56.  
  57.     // the vertical scrollbar is arguably upside-down.  Pressing the down arrow
  58.     // increments its value, and pressing the up arrow decrements it.  Thus
  59.     // we have to flip the direction of our calculations as follows.
  60.     scrollbar1.setValues(-initial, 1, -maximum, -minimum+1);
  61.     scrollbar1.setBlockIncrement(-increment);
  62.     scrollbar1.addAdjustmentListener(new IntegerSpinItemEditor_scrollbar1_adjustmentAdapter(this));
  63.  
  64.     maskableTextItemEditor1.setText(String.valueOf(initial));
  65.     maskableTextItemEditor1.addActionListener(new IntegerSpinItemEditor_maskableTextItemEditor1_actionListener(this));
  66.  
  67.     setLayout(new BorderLayout());
  68.     add(maskableTextItemEditor1, BorderLayout.CENTER);
  69.     add(scrollbar1, BorderLayout.EAST);
  70.  
  71.     maskableTextItemEditor1.setEditMask("######", Variant.INT, Locale.getDefault());
  72.   }
  73.  
  74.   public void setMinimum(int minimum) {
  75.     scrollbar1.setMinimum(-minimum+1);
  76.     this.minimum = minimum;
  77.   }
  78.  
  79.   public int getMinimum() {
  80.     return minimum;
  81.   }
  82.  
  83.   public void setMaximum(int maximum) {
  84.     scrollbar1.setMaximum(-maximum);
  85.     this.maximum = maximum;
  86.   }
  87.  
  88.   public int getMaximum() {
  89.     return maximum;
  90.   }
  91.  
  92.   public void setIncrement(int increment) {
  93.     scrollbar1.setBlockIncrement(-increment);
  94.     this.increment = increment;
  95.   }
  96.  
  97.   public int getIncrement() {
  98.     return increment;
  99.   }
  100.  
  101.   public void addKeyListener(KeyListener l) {
  102.     super.addKeyListener(l);
  103.     maskableTextItemEditor1.addKeyListener(l);
  104.     scrollbar1.addKeyListener(l);
  105.   }
  106.  
  107.   public void removeKeyListener(KeyListener l) {
  108.     super.removeKeyListener(l);
  109.     maskableTextItemEditor1.removeKeyListener(l);
  110.     scrollbar1.removeKeyListener(l);
  111.   }
  112.  
  113.   public Object getValue() {
  114.     Variant variant = (Variant) maskableTextItemEditor1.getValue();
  115.     int value = variant.getInt();
  116.     if (value < minimum) {
  117.       value = minimum;
  118.     } else if (value > maximum) {
  119.       value = maximum;
  120.     }
  121.     variant.setInt(value);
  122. //    System.out.println("IntegerSpinItemEditor.getValue(): " + value);
  123.     return variant;
  124.   }
  125.  
  126.   public Component getComponent() {
  127.     return this;
  128.   }
  129.  
  130.   public void startEdit(Object value, Rectangle bounds, ItemEditSite site) {
  131. //    System.out.println("IntegerSpinItemEditor.startEdit(" + value.toString() + ")");
  132.  
  133.     // do bounds needs to be adjusted?  Possibly not, because we layout again below.
  134.     maskableTextItemEditor1.startEdit(value, bounds, site);
  135.  
  136.     Integer integer;
  137.     try {
  138.       integer = new Integer(((Variant) maskableTextItemEditor1.getValue()).getInt());
  139.     } catch (NumberFormatException ex) {
  140.       integer = new Integer(minimum);
  141.     }
  142.     int intVal = integer.intValue();
  143.  
  144.     scrollbar1.setValue(-intVal);
  145.  
  146.     if (site != null) {
  147.       setBackground(site.getBackground());
  148.       setForeground(site.getForeground());
  149.       setFont(site.getFont());
  150.     }
  151.  
  152.     setBounds(bounds.x, bounds.y, bounds.width, bounds.height);
  153.     validate();
  154.     setVisible(true);
  155.     maskableTextItemEditor1.requestFocus();
  156.   }
  157.  
  158.   public void changeBounds(Rectangle bounds) {
  159. //    System.out.println("IntegerSpinItemEditor.changeBounds()");
  160.     maskableTextItemEditor1.changeBounds(bounds);
  161.     setBounds(bounds.x, bounds.y, bounds.width, bounds.height);
  162.     validate();
  163.   }
  164.  
  165.   public boolean canPost() {
  166. //    System.out.println("IntegerSpinItemEditor.canPost()");
  167.     return maskableTextItemEditor1.canPost();
  168.   }
  169.  
  170.   public void endEdit(boolean posted) {
  171. //    System.out.println("IntegerSpinItemEditor.endEdit()");
  172.     maskableTextItemEditor1.endEdit(posted);
  173.   }
  174.  
  175.   public void scrollbar1_adjustmentValueChanged(AdjustmentEvent e) {
  176. //    System.out.println("IntegerSpinItemEditor.adjustmentValueChanged(), scrollbar1.getValue(): " + scrollbar1.getValue());
  177.     Integer integer;
  178.     Variant variant = (Variant) maskableTextItemEditor1.getValue();
  179.     maskableTextItemEditor1.endEdit(false);
  180. //    System.out.println("original value: " + variant);
  181.     int value = variant.getInt();
  182.     int type = e.getAdjustmentType();
  183.     switch (type) {
  184.       case AdjustmentEvent.UNIT_INCREMENT:
  185. //      System.out.println("UNIT_INCREMENT");
  186.         value--;
  187.         break;
  188.       case AdjustmentEvent.UNIT_DECREMENT:
  189. //      System.out.println("UNIT_DECREMENT");
  190.         value++;
  191.         break;
  192.       case AdjustmentEvent.BLOCK_INCREMENT:
  193. //      System.out.println("BLOCK_INCREMENT");
  194.         value -= increment;
  195.         break;
  196.       case AdjustmentEvent.BLOCK_DECREMENT:
  197. //      System.out.println("BLOCK_DECREMENT");
  198.         value += increment;
  199.         break;
  200.     }
  201.     if (value < minimum) {
  202.       value = minimum;
  203.     } else if (value > maximum) {
  204.       value = maximum;
  205.     }
  206.     variant.setInt(value);                     
  207.     scrollbar1.setValue(-value);
  208. //    System.out.println("IntegerSpinItemEditor.adjustmentValueChanged(), scrollbar1.getValue(): " + scrollbar1.getValue());
  209.  
  210. //    System.out.println("new value: " + value);
  211.     maskableTextItemEditor1.startEdit(variant, getBounds(), null);
  212.     validate();
  213.     setVisible(true);
  214.     requestFocus();
  215.   }
  216.   
  217.   void maskableTextItemEditor1_actionPerformed(ActionEvent e) {
  218. //    System.out.println("IntegerSpinItemEditor.actionPerformed()");
  219.     try {
  220.       scrollbar1.setValue(((Variant) maskableTextItemEditor1.getValue()).getInt() * -1);
  221.     } catch (Exception ex) {
  222.       ex.printStackTrace();
  223.     }
  224.   }
  225.  
  226. }
  227.  
  228. class IntegerSpinItemEditor_scrollbar1_adjustmentAdapter implements java.awt.event.AdjustmentListener {
  229.   IntegerSpinItemEditor adaptee;
  230.  
  231.   IntegerSpinItemEditor_scrollbar1_adjustmentAdapter(IntegerSpinItemEditor adaptee) {
  232.     this.adaptee = adaptee;
  233.   }
  234.  
  235.   public void adjustmentValueChanged(java.awt.event.AdjustmentEvent e) {
  236.     adaptee.scrollbar1_adjustmentValueChanged(e);
  237.   }
  238. }
  239.  
  240. class IntegerSpinItemEditor_maskableTextItemEditor1_actionListener implements java.awt.event.ActionListener {
  241.   IntegerSpinItemEditor adaptee;
  242.  
  243.   IntegerSpinItemEditor_maskableTextItemEditor1_actionListener(IntegerSpinItemEditor adaptee) {
  244.     this.adaptee = adaptee;
  245.   }
  246.  
  247.   public void actionPerformed(ActionEvent e) {
  248.     adaptee.maskableTextItemEditor1_actionPerformed(e);
  249.   }
  250. }
  251.