label2d.java

来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 160 行

JAVA
160
字号
package magic.awtex;

import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.util.*;
import magic.graphics.*;

public class Label2D
    extends Component2D
{
  // 绘制时所使用的字体
  protected Font font;

  // 实际要绘制的文本
  protected String text;

  // 为可用和不可用两种状态所准备的 Paint
  protected Paint paint;
  protected Paint disabledPaint;

  // 默认的Paint
  protected final Paint DEFAULT_PAINT = Color.GRAY;

  // 用指定的字体、文本和pain构建一个新的Label2D
  public Label2D(Font f, String str, Paint p)
  {
    super();

    setFont(f);
    setText(str);
    setPaint(p);

    // 将默认paint设置为不可用状态的paint
    setDisabledPaint(DEFAULT_PAINT);
  }

  // 使用指定的字体、文本、paint和位置构建一个新的Label2D
  public Label2D(Font f, String str, Paint p, Vector2D v)
  {
    super();

    setFont(f);
    setText(str);
    setPaint(p);
    setPos(v);

    // 将默认paint设置为不可用状态的paint
    setDisabledPaint(DEFAULT_PAINT);
  }

  // 将标签相对于指定的矩形对齐
  public void centerOn(Rectangle2D r, Graphics2D g2d)
  {
    // 从Graphics2D容器中获取FontRenderContext
    FontRenderContext frc = g2d.getFontRenderContext();

    // 获取文本布局
    TextLayout layout = new TextLayout(text, font, frc);

    // 获取布局的边界
    Rectangle2D textBounds = layout.getBounds();

    // 设置新的位置
    setX(r.getX() + (r.getWidth() / 2) - (textBounds.getWidth() / 2));
    setY(r.getY() + ( (r.getHeight() + textBounds.getHeight()) / 2));

    // 更新总体边界矩形
    updateBounds(g2d);
  }

  // 使用当前字体的布局更新标签的边界
  public void updateBounds(Graphics2D g2d)
  {
    // 从Graphics2D容器中获取FontRenderContext
    FontRenderContext frc = g2d.getFontRenderContext();

    // 获取文本布局
    TextLayout layout = new TextLayout(text, font, frc);

    // 获取布局的边界
    Rectangle2D textBounds = layout.getBounds();

    bounds.setRect(getX(), getY(), textBounds.getWidth(), textBounds.getHeight());
  }

  public void setFont(Font f)
  {
    font = f;
  }

  public void setText(String str)
  {
    text = str;
  }

  public String getText()
  {
    return text;
  }

  public void setPaint(Paint p)
  {
    paint = p;
  }

  public void setDisabledPaint(Paint p)
  {
    disabledPaint = p;
  }

  // 在当前位置绘制标签
  public void paint(Graphics2D g2d)
  {
    // 只有在可见时才绘制
    if (isVisible()) {
      // 设置字体
      g2d.setFont(font);

      // 更加是否可用来设置paint
      if (isEnabled()) {
        g2d.setPaint(paint);
      }
      else {
        g2d.setPaint(disabledPaint);
      }

      g2d.drawString(text, (int) pos.getX(), (int) pos.getY());
    }
  }

  // 在指定的偏移绘制标签
  public void paint(Graphics2D g2d, double dx, double dy)
  {
    // 只是在可见时绘制
    if (isVisible()) {
      // 设置字体
      g2d.setFont(font);

      // 根据可用状态设置paint
      if (isEnabled()) {
        g2d.setPaint(paint);
      }
      else {
        g2d.setPaint(disabledPaint);
      }

      // 绘制字符串,并添加到偏移位置
      g2d.drawString(text, (int) (pos.getX() + dx), (int) (pos.getY() + dy));
    }
  }

  // 返回描述标签的字符串
  public String toString()
  {
    // 返回父类toString方法的结果和当前的文本标签
    return super.toString() + " " + text;
  }

} // Label2D

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?