home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / border / TitledBorder.class (.txt) < prev   
Encoding:
Java Class File  |  1998-02-26  |  6.4 KB  |  305 lines

  1. package com.sun.java.swing.border;
  2.  
  3. import com.sun.java.swing.UIManager;
  4. import java.awt.Color;
  5. import java.awt.Component;
  6. import java.awt.Dimension;
  7. import java.awt.Font;
  8. import java.awt.FontMetrics;
  9. import java.awt.Graphics;
  10. import java.awt.Insets;
  11. import java.awt.Point;
  12. import java.awt.Rectangle;
  13.  
  14. public class TitledBorder extends AbstractBorder {
  15.    protected String title;
  16.    protected Border border;
  17.    protected int titlePosition;
  18.    protected int titleJustification;
  19.    protected Font titleFont;
  20.    protected Color titleColor;
  21.    public static final int DEFAULT_POSITION = 0;
  22.    public static final int ABOVE_TOP = 1;
  23.    public static final int TOP = 2;
  24.    public static final int BELOW_TOP = 3;
  25.    public static final int ABOVE_BOTTOM = 4;
  26.    public static final int BOTTOM = 5;
  27.    public static final int BELOW_BOTTOM = 6;
  28.    public static final int DEFAULT_JUSTIFICATION = 0;
  29.    public static final int LEFT = 1;
  30.    public static final int CENTER = 2;
  31.    public static final int RIGHT = 3;
  32.    protected static final int EDGE_SPACING = 2;
  33.    protected static final int TEXT_SPACING = 2;
  34.    protected static final int TEXT_INSET_H = 5;
  35.  
  36.    public TitledBorder(String var1) {
  37.       this((Border)null, var1, 1, 2, (Font)null, (Color)null);
  38.    }
  39.  
  40.    public TitledBorder(Border var1) {
  41.       this(var1, "", 1, 2, (Font)null, (Color)null);
  42.    }
  43.  
  44.    public TitledBorder(Border var1, String var2) {
  45.       this(var1, var2, 1, 2, (Font)null, (Color)null);
  46.    }
  47.  
  48.    public TitledBorder(Border var1, String var2, int var3, int var4) {
  49.       this(var1, var2, var3, var4, (Font)null, (Color)null);
  50.    }
  51.  
  52.    public TitledBorder(Border var1, String var2, int var3, int var4, Font var5) {
  53.       this(var1, var2, var3, var4, var5, (Color)null);
  54.    }
  55.  
  56.    public TitledBorder(Border var1, String var2, int var3, int var4, Font var5, Color var6) {
  57.       this.title = var2;
  58.       this.border = var1;
  59.       this.titleFont = var5;
  60.       this.titleColor = var6;
  61.       this.setTitleJustification(var3);
  62.       this.setTitlePosition(var4);
  63.    }
  64.  
  65.    public void paintBorder(Component var1, Graphics var2, int var3, int var4, int var5, int var6) {
  66.       if (this.getTitle() != null && !this.getTitle().equals("")) {
  67.          Rectangle var7 = new Rectangle(2, 2, var5 - 4, var6 - 4);
  68.          Font var8 = var2.getFont();
  69.          Color var9 = var2.getColor();
  70.          var2.setFont(this.getFont(var1));
  71.          FontMetrics var10 = var2.getFontMetrics();
  72.          int var11 = var10.getHeight();
  73.          int var12 = var10.getDescent();
  74.          int var13 = var10.getAscent();
  75.          Point var14 = new Point();
  76.          int var16 = var10.stringWidth(this.getTitle());
  77.          Insets var17;
  78.          if (this.getBorder() != null) {
  79.             var17 = this.getBorder().getBorderInsets(var1);
  80.          } else {
  81.             var17 = new Insets(0, 0, 0, 0);
  82.          }
  83.  
  84.          switch (this.getTitlePosition()) {
  85.             case 0:
  86.             case 2:
  87.                int var18 = Math.max(0, var13 / 2 + 2 - 2);
  88.                var7.y += var18;
  89.                var7.height -= var18;
  90.                var14.y = var7.y - var12 + (var17.top + var13 + var12) / 2;
  91.                break;
  92.             case 1:
  93.                int var15 = var13 + var12 + (Math.max(2, 4) - 2);
  94.                var7.y += var15;
  95.                var7.height -= var15;
  96.                var14.y = var7.y - (var12 + 2);
  97.                break;
  98.             case 3:
  99.                var14.y = var7.y + var17.top + var13 + 2;
  100.                break;
  101.             case 4:
  102.                var14.y = var7.y + var7.height - (var17.bottom + var12 + 2);
  103.                break;
  104.             case 5:
  105.                var7.height -= var11 / 2;
  106.                var14.y = var7.y + var7.height - var12 + (var13 + var12 - var17.bottom) / 2;
  107.                break;
  108.             case 6:
  109.                var7.height -= var11;
  110.                var14.y = var7.y + var7.height + var13 + 2;
  111.          }
  112.  
  113.          this.getBorder().paintBorder(var1, var2, var7.x, var7.y, var7.width, var7.height);
  114.          switch (this.getTitleJustification()) {
  115.             case 0:
  116.             case 1:
  117.                var14.x = var7.x + 5 + var17.left;
  118.                break;
  119.             case 2:
  120.                var14.x = var7.x + (var7.width - var16) / 2;
  121.                break;
  122.             case 3:
  123.                var14.x = var7.x + var7.width - (var16 + 5 + var17.right);
  124.          }
  125.  
  126.          var2.setColor(var1.getBackground());
  127.          var2.fillRect(var14.x - 2, var14.y - (var11 - var12), var16 + 4, var11 - var12);
  128.          var2.setColor(this.getTitleColor());
  129.          var2.drawString(this.getTitle(), var14.x, var14.y);
  130.          var2.setFont(var8);
  131.          var2.setColor(var9);
  132.       } else {
  133.          this.getBorder().paintBorder(var1, var2, var3, var4, var5, var6);
  134.       }
  135.    }
  136.  
  137.    public Insets getBorderInsets(Component var1) {
  138.       int var4 = 0;
  139.       int var5 = 16;
  140.       Insets var2;
  141.       if (this.getBorder() != null) {
  142.          var2 = this.getBorder().getBorderInsets(var1);
  143.       } else {
  144.          var2 = new Insets(0, 0, 0, 0);
  145.       }
  146.  
  147.       var2.left += 4;
  148.       var2.right += 4;
  149.       var2.top += 4;
  150.       var2.bottom += 4;
  151.       if (var1 != null && this.getTitle() != null && !this.getTitle().equals("")) {
  152.          Font var6 = this.getFont(var1);
  153.          FontMetrics var3 = var1.getFontMetrics(var6);
  154.          if (var3 != null) {
  155.             var4 = var3.getDescent();
  156.             var5 = var3.getAscent();
  157.          }
  158.  
  159.          switch (this.getTitlePosition()) {
  160.             case 0:
  161.             case 2:
  162.                var2.top += var5 + var4;
  163.                break;
  164.             case 1:
  165.                var2.top += var5 + var4 + (Math.max(2, 4) - 2);
  166.                break;
  167.             case 3:
  168.                var2.top += var5 + var4 + 2;
  169.                break;
  170.             case 4:
  171.                var2.bottom += var5 + var4 + 2;
  172.                break;
  173.             case 5:
  174.                var2.bottom += var5 + var4;
  175.                break;
  176.             case 6:
  177.                var2.bottom += var5 + 2;
  178.          }
  179.  
  180.          return var2;
  181.       } else {
  182.          return var2;
  183.       }
  184.    }
  185.  
  186.    public boolean isBorderOpaque() {
  187.       return false;
  188.    }
  189.  
  190.    public String getTitle() {
  191.       return this.title;
  192.    }
  193.  
  194.    public Border getBorder() {
  195.       Border var1 = this.border;
  196.       if (var1 == null) {
  197.          var1 = UIManager.getBorder("TitledBorder.border");
  198.       }
  199.  
  200.       return var1;
  201.    }
  202.  
  203.    public int getTitlePosition() {
  204.       return this.titlePosition;
  205.    }
  206.  
  207.    public int getTitleJustification() {
  208.       return this.titleJustification;
  209.    }
  210.  
  211.    public Font getTitleFont() {
  212.       Font var1 = this.titleFont;
  213.       if (var1 == null) {
  214.          var1 = UIManager.getFont("TitledBorder.font");
  215.       }
  216.  
  217.       return var1;
  218.    }
  219.  
  220.    public Color getTitleColor() {
  221.       Color var1 = this.titleColor;
  222.       if (var1 == null) {
  223.          var1 = UIManager.getColor("TitledBorder.titleColor");
  224.       }
  225.  
  226.       return var1;
  227.    }
  228.  
  229.    public void setTitle(String var1) {
  230.       this.title = var1;
  231.    }
  232.  
  233.    public void setBorder(Border var1) {
  234.       this.border = var1;
  235.    }
  236.  
  237.    public void setTitlePosition(int var1) {
  238.       switch (var1) {
  239.          case 0:
  240.          case 1:
  241.          case 2:
  242.          case 3:
  243.          case 4:
  244.          case 5:
  245.          case 6:
  246.             this.titlePosition = var1;
  247.             return;
  248.          default:
  249.             throw new IllegalArgumentException(var1 + " is not a valid title position.");
  250.       }
  251.    }
  252.  
  253.    public void setTitleJustification(int var1) {
  254.       switch (var1) {
  255.          case 0:
  256.          case 1:
  257.          case 2:
  258.          case 3:
  259.             this.titleJustification = var1;
  260.             return;
  261.          default:
  262.             throw new IllegalArgumentException(var1 + " is not a valid title justification.");
  263.       }
  264.    }
  265.  
  266.    public void setTitleFont(Font var1) {
  267.       this.titleFont = var1;
  268.    }
  269.  
  270.    public void setTitleColor(Color var1) {
  271.       this.titleColor = var1;
  272.    }
  273.  
  274.    public Dimension getMinimumSize(Component var1) {
  275.       Insets var2 = this.getBorderInsets(var1);
  276.       Dimension var3 = new Dimension(var2.right + var2.left, var2.top + var2.bottom);
  277.       Font var4 = this.getFont(var1);
  278.       FontMetrics var5 = var1.getFontMetrics(var4);
  279.       switch (this.titlePosition) {
  280.          case 0:
  281.          case 2:
  282.          case 3:
  283.          case 4:
  284.          case 5:
  285.          default:
  286.             var3.width += var5.stringWidth(this.getTitle());
  287.             break;
  288.          case 1:
  289.          case 6:
  290.             var3.width = Math.max(var5.stringWidth(this.getTitle()), var3.width);
  291.       }
  292.  
  293.       return var3;
  294.    }
  295.  
  296.    protected Font getFont(Component var1) {
  297.       Font var2;
  298.       if ((var2 = this.getTitleFont()) != null) {
  299.          return var2;
  300.       } else {
  301.          return var1 != null && (var2 = var1.getFont()) != null ? var2 : new Font("Dialog", 0, 12);
  302.       }
  303.    }
  304. }
  305.