⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multilinelabel.java

📁 经典的货郎担问题解决办法
💻 JAVA
字号:
//// Label ueber mehrere Zeilen//// Java in a Nutshell, p. 120//// From the VoroGlide distribution, which is marked// Copyright 1996-1997 Praktische Informatik VI, FernUniversit鋞 Hagen// Christian Icking, Rolf Klein, Peter K鰈lner, Lihong Mapackage com.well.www.user.xanthian.java.tools;import java.awt.*;import java.util.*;public class MultiLineLabel extends Canvas{  public static final int LEFT = 0;  public static final int CENTER = 1;  public static final int RIGHT = 2;  protected String[] lines;  protected int num_lines;  protected int margin_width;  protected int margin_height;  protected int line_height;  protected int line_ascent;  protected int[] line_widths;  protected int max_width;  protected int alignment = LEFT;  protected void newLabel(String label)  {    StringTokenizer t = new StringTokenizer(label, "\n");    num_lines = t.countTokens();    lines = new String[num_lines];    line_widths = new int[num_lines];    for(int i = 0; i<num_lines; i++)      lines[i] = t.nextToken();  }  protected void measure()  {    FontMetrics fm = this.getFontMetrics(this.getFont());    if(fm == null) return;    line_height = fm.getHeight();    line_ascent = fm.getAscent();    max_width = 0;    for(int i = 0; i < num_lines; i++)    {      line_widths[i] = fm.stringWidth(lines[i]);      if(line_widths[i] > max_width)        max_width = line_widths[i];    }  }  public MultiLineLabel  (    String label,    int margin_width,    int margin_height,    int alignment  )  {    newLabel(label);    this.margin_width = margin_width;    this.margin_height = margin_height;    this.alignment = alignment;  }  public MultiLineLabel(String label, int margin_width, int margin_height)  {    this(label, margin_width, margin_height, LEFT);  }   public MultiLineLabel(String label, int alignment)   {     this(label, 10, 10, alignment);  }   public MultiLineLabel(String label)   {     this(label, 10, 10, LEFT);  }  public void setLabel(String label)  {    newLabel(label);    measure();    repaint();  }  public void setFont(Font f)  {    super.setFont(f);    measure();    repaint();  }  public void setForeground(Color c)  {    super.setForeground(c);    repaint();  }  public void setAlignment(int a)  {    alignment = a;    repaint();  }  public void setMarginWidth(int mw)  {    margin_width = mw;    repaint();  }  public void setMarginHeight(int mh)  {    margin_height = mh;    repaint();  }  public int getAlignment()  {    return(alignment);  }  public int getMarginWidth()  {    return(margin_width);  }  public int getMarginHeight()  {    return(margin_height);  }  public void addNotify()  {    super.addNotify();    measure();  }  public Dimension getPreferredSize()  {    return new    Dimension    (      max_width + 2 * margin_width,      num_lines * line_height + 2 * margin_height    );  }  public Dimension getMinimumSize()  {    return new Dimension(max_width, num_lines * line_height);  }  public void paint(Graphics g)  {    int x, y;    Dimension d = this.getSize();    y = line_ascent + (d.height - num_lines * line_height)/2;    for(int i = 0; i < num_lines; i++, y += line_height)    {      switch(alignment) {        case LEFT:          x = margin_width;          break;        case CENTER:        default:          x = (d.width - line_widths[i])/2;          break;        case RIGHT:          x = d.width - margin_width - line_widths[i];          break;      }      g.drawString(lines[i], x, y);    }  }}

⌨️ 快捷键说明

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