home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 February / VPR9802A.ISO / APP_DEMO / VC / MAIN.BIN / TextArea.java < prev    next >
Text File  |  1997-10-27  |  10KB  |  378 lines

  1. /*
  2.  * @(#)TextArea.java    1.34 97/01/27
  3.  * 
  4.  * Copyright (c) 1995, 1996 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.  * CopyrightVersion 1.1_beta
  20.  * 
  21.  */
  22. package java.awt;
  23.  
  24. import java.awt.peer.TextAreaPeer;
  25.  
  26. /**
  27.  * A TextArea object is a multi-line area that displays text. It can
  28.  * be set to allow editing or read-only modes.
  29.  *
  30.  * @version    1.34, 01/27/97
  31.  * @author     Sami Shaio
  32.  */
  33. public class TextArea extends TextComponent {
  34.  
  35.     /**
  36.      * The number of rows in the TextArea.
  37.      */
  38.     int    rows;
  39.  
  40.     /**
  41.      * The number of columns in the TextArea.
  42.      */
  43.     int    columns;
  44.  
  45.     private static final String base = "text";
  46.     private static int nameCounter = 0;
  47.  
  48.     /**
  49.      * Create and display both vertical and horizontal scrollbars.
  50.      */
  51.     public static final int SCROLLBARS_BOTH = 0;
  52.  
  53.     /**
  54.      * Create and display vertical scrollbar only.
  55.      */
  56.     public static final int SCROLLBARS_VERTICAL_ONLY = 1;
  57.  
  58.     /**
  59.      * Create and display horizontal scrollbar only.
  60.      */
  61.     public static final int SCROLLBARS_HORIZONTAL_ONLY = 2;
  62.  
  63.     /**
  64.      * Do not create or display any scrollbars for the text area.
  65.      */
  66.     public static final int SCROLLBARS_NONE = 3;
  67.  
  68.     /**
  69.      * Determines which scrollbars are created for the 
  70.      * text area.
  71.      */
  72.     private int scrollbarVisibility;
  73.  
  74.     /*
  75.      * JDK 1.1 serialVersionUID 
  76.      */
  77.      private static final long serialVersionUID = 3692302836626095722L;
  78.  
  79.     /**
  80.      * Constructs a new TextArea.
  81.      */
  82.     public TextArea() {
  83.     this("", 0, 0, SCROLLBARS_BOTH);
  84.     }
  85.  
  86.     /**
  87.      * Constructs a new TextArea with the specified text displayed.
  88.      * @param text the text to be displayed 
  89.      */
  90.     public TextArea(String text) {
  91.     this(text, 0, 0, SCROLLBARS_BOTH);
  92.     }
  93.  
  94.     /**
  95.      * Constructs a new empty TextArea with the specified number of
  96.      * rows and columns.
  97.      * @param rows the number of rows
  98.      * @param columns the number of columns
  99.      */
  100.     public TextArea(int rows, int columns) {
  101.     this("", rows, columns);
  102.     }
  103.  
  104.     /**
  105.      * Constructs a new TextArea with the specified text and number
  106.      * of rows and columns.
  107.      * @param text the text to be displayed
  108.      * @param rows the number of rows
  109.      * @param columns the number of columns
  110.      */
  111.     public TextArea(String text, int rows, int columns) {
  112.         this(text, rows, columns, SCROLLBARS_BOTH);
  113.     }
  114.  
  115.     /**
  116.      * Constructs a new TextArea with the specified text and number
  117.      * of rows, columns, and scrollbar visibility.
  118.      * @param text the text to be displayed
  119.      * @param rows the number of rows
  120.      * @param columns the number of columns
  121.      * @param scrollbars the visibility of scrollbars
  122.      */
  123.     public TextArea(String text, int rows, int columns, int scrollbars) {
  124.     super(text);
  125.     this.name = base + nameCounter++;
  126.     this.rows = rows;
  127.     this.columns = columns;
  128.     this.scrollbarVisibility = scrollbars;
  129.     }
  130.  
  131.     /**
  132.      * Creates the TextArea's peer.  The peer allows us to modify
  133.      * the appearance of the TextArea without changing any of its
  134.      * functionality.
  135.      */
  136.     public void addNotify() {
  137.     peer = getToolkit().createTextArea(this);
  138.     super.addNotify();
  139.     }
  140.  
  141.     /**
  142.      * Inserts the specified text at the specified position.
  143.      * @param str the text to insert.
  144.      * @param pos the position at which to insert.
  145.      * @see TextComponent#setText
  146.      * @see #replaceRange
  147.      */
  148.     public synchronized void insert(String str, int pos) {
  149.         insertText(str, pos);
  150.     }
  151.  
  152.     /**
  153.      * @deprecated As of JDK version 1.1,
  154.      * replaced by insert(String, int).
  155.      */
  156.     public void insertText(String str, int pos) {
  157.     TextAreaPeer peer = (TextAreaPeer)this.peer;
  158.     if (peer != null) {
  159.         peer.insertText(str, pos);
  160.     } else {
  161.         text = text.substring(0, pos) + str + text.substring(pos);
  162.     }
  163.     }
  164.  
  165.     /**
  166.      * Appends the given text to the end.
  167.      * @param str the text to insert
  168.      * @see #insert
  169.      */
  170.     public synchronized void append(String str) {
  171.         appendText(str);
  172.     }
  173.  
  174.     /**
  175.      * @deprecated As of JDK version 1.1,
  176.      * replaced by append(String).
  177.      */
  178.     public void appendText(String str) {
  179.     if (peer != null) {
  180.         insertText(str, getText().length());
  181.     } else {
  182.         text = text + str;
  183.     }
  184.     }
  185.  
  186.     /**
  187.      * Replaces text from the indicated start to end position with the
  188.      * new text specified.
  189.      * @param str the text to use as the replacement.
  190.      * @param start the start position.
  191.      * @param end the end position.
  192.      * @see #insert
  193.      * @see #replaceRange
  194.      */
  195.     public synchronized void replaceRange(String str, int start, int end) {
  196.     replaceText(str, start, end);
  197.     }
  198.  
  199.     /**
  200.      * @deprecated As of JDK version 1.1,
  201.      * replaced by replaceRange(String, int, int).
  202.      */
  203.     public void replaceText(String str, int start, int end) {
  204.     TextAreaPeer peer = (TextAreaPeer)this.peer;
  205.     if (peer != null) {
  206.         peer.replaceText(str, start, end);
  207.     } else {
  208.         text = text.substring(0, start) + str + text.substring(end);
  209.     }
  210.     }
  211.  
  212.     /**
  213.      * Returns the number of rows in the TextArea.
  214.      */
  215.     public int getRows() {
  216.     return rows;
  217.     }
  218.  
  219.     /**
  220.      * Sets the number of rows for this TextArea.
  221.      * @param rows the number of rows
  222.      * @exception IllegalArgumentException If rows is less than 0.
  223.      */
  224.     public void setRows(int rows) {
  225.     int oldVal = this.rows;
  226.     if (rows < 0) {
  227.         throw new IllegalArgumentException("rows less than zero.");
  228.     }
  229.     if (rows != oldVal) {
  230.         this.rows = rows;
  231.         invalidate();
  232.     }
  233.     }
  234.  
  235.     /**
  236.      * Returns the number of columns in the TextArea.
  237.      */
  238.     public int getColumns() {
  239.     return columns;
  240.     }
  241.  
  242.     /**
  243.      * Sets the number of columns for this TextArea.
  244.      * @param columns the number of columns
  245.      * @exception IllegalArgumentException If columns is less than 0.
  246.      */
  247.     public void setColumns(int columns) {
  248.     int oldVal = this.columns;
  249.     if (columns < 0) {
  250.         throw new IllegalArgumentException("columns less than zero.");
  251.     }
  252.     if (columns != oldVal) {
  253.         this.columns = columns;
  254.         invalidate();
  255.     }
  256.     }
  257.  
  258.     /**
  259.      * Returns the enumerated value describing which scrollbars
  260.      * the text area has.
  261.      * @return the display policy for the scrollbars
  262.      */
  263.     public int getScrollbarVisibility() {
  264.         return scrollbarVisibility;
  265.     }
  266.  
  267.  
  268.     /**
  269.      * Returns the specified row and column Dimensions of the TextArea.
  270.      * @param rows the preferred rows amount
  271.      * @param columns the preferred columns amount
  272.      */
  273.     public Dimension getPreferredSize(int rows, int columns) {
  274.         return preferredSize(rows, columns);
  275.     }
  276.  
  277.     /**
  278.      * @deprecated As of JDK version 1.1,
  279.      * replaced by getPreferredSize(int, int).
  280.      */
  281.     public Dimension preferredSize(int rows, int columns) {
  282.     synchronized (Component.LOCK) {
  283.         TextAreaPeer peer = (TextAreaPeer)this.peer;
  284.         return (peer != null) ? 
  285.                peer.preferredSize(rows, columns) :
  286.                super.preferredSize();
  287.     }
  288.     }
  289.  
  290.     /**
  291.      * Returns the preferred size Dimensions of the TextArea.
  292.      */
  293.     public Dimension getPreferredSize() {
  294.     return preferredSize();
  295.     }
  296.  
  297.     /**
  298.      * @deprecated As of JDK version 1.1,
  299.      * replaced by getPreferredSize().
  300.      */
  301.     public Dimension preferredSize() {
  302.     synchronized (Component.LOCK) {
  303.         return ((rows > 0) && (columns > 0)) ? 
  304.                preferredSize(rows, columns) :
  305.                super.preferredSize();
  306.     }
  307.     }
  308.  
  309.     /**
  310.      * Returns the specified minimum size Dimensions of the TextArea.
  311.      * @param rows the minimum row size
  312.      * @param columns the minimum column size
  313.      */
  314.     public Dimension getMinimumSize(int rows, int columns) {
  315.         return minimumSize(rows, columns);
  316.     }
  317.  
  318.     /**
  319.      * @deprecated As of JDK version 1.1,
  320.      * replaced by getMinimumSize(int, int).
  321.      */
  322.     public Dimension minimumSize(int rows, int columns) {
  323.     synchronized (Component.LOCK) {
  324.         TextAreaPeer peer = (TextAreaPeer)this.peer;
  325.         return (peer != null) ? 
  326.                peer.minimumSize(rows, columns) :
  327.                super.minimumSize();
  328.     }
  329.     }
  330.  
  331.     /**
  332.      * Returns the minimum size Dimensions of the TextArea.
  333.      */
  334.     public Dimension getMinimumSize() {
  335.     return minimumSize();
  336.     }
  337.  
  338.     /**
  339.      * @deprecated As of JDK version 1.1,
  340.      * replaced by getMinimumSize().
  341.      */
  342.     public Dimension minimumSize() {
  343.     synchronized (Component.LOCK) {
  344.         return ((rows > 0) && (columns > 0)) ? 
  345.                minimumSize(rows, columns) :
  346.                super.minimumSize();
  347.     }
  348.     }
  349.  
  350.     /**
  351.      * Returns the String of parameters for this TextArea.
  352.      */
  353.     protected String paramString() {
  354.     String sbVisStr;
  355.     switch (scrollbarVisibility) {
  356.         case SCROLLBARS_BOTH:
  357.         sbVisStr = "both";
  358.         break;
  359.         case SCROLLBARS_VERTICAL_ONLY:
  360.         sbVisStr = "vertical-only";
  361.         break;
  362.         case SCROLLBARS_HORIZONTAL_ONLY:
  363.         sbVisStr = "horizontal-only";
  364.         break;
  365.         case SCROLLBARS_NONE:
  366.         sbVisStr = "none";
  367.         break;
  368.         default:
  369.         sbVisStr = "invalid display policy";
  370.     }
  371.       
  372.     return super.paramString() + ",rows=" + rows + 
  373.         ",columns=" + columns + 
  374.       ", scrollbarVisibility=" + sbVisStr;
  375.     }
  376.  
  377. }
  378.