1 30 31 package rcm.awt; 32 33 import java.awt.FontMetrics ; 34 import java.awt.Graphics ; 35 import java.awt.Label ; 36 import java.util.StringTokenizer ; 37 38 40 public class MultiLineString { 41 42 String [] lines; 43 44 public MultiLineString (String string) { 45 StringTokenizer tok = new StringTokenizer (string, "\n"); 46 lines = new String [tok.countTokens ()]; 47 for (int i=0; i<lines.length; ++i) 48 lines[i] = tok.nextToken (); 49 } 50 51 public MultiLineString (String [] lines) { 52 this.lines = lines; 53 } 54 55 public int countLines () { 56 return lines.length; 57 } 58 59 public String getLineAt (int i) { 60 return lines[i]; 61 } 62 63 public int getWidth (FontMetrics fm) { 64 int w = 0; 65 for (int i=0; i<lines.length; ++i) 66 w = Math.max (w, fm.stringWidth (lines[i])); 67 return w; 68 } 69 70 public int getHeight (FontMetrics fm) { 71 return fm.getHeight() * lines.length; 72 } 73 74 public void draw (Graphics g, int x, int y, int alignment) { 75 FontMetrics fm = g.getFontMetrics (); 76 77 y += fm.getAscent (); 78 79 int width = alignment != Label.LEFT 80 ? getWidth (fm) 81 : 0; 83 for (int i=0; i<lines.length; ++i) { 84 int x1 = x; 85 switch (alignment) { 86 case Label.LEFT: 87 break; 88 case Label.RIGHT: 89 x += width - fm.stringWidth (lines[i]); 90 break; 91 case Label.CENTER: 92 x += (width - fm.stringWidth (lines[i]))/2; 93 break; 94 } 95 96 g.drawString (lines[i], x, y); 97 y += fm.getHeight (); 98 } 99 } 100 101 } 102
| Popular Tags
|