X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=spider-web%2FMultiLineLabel.java;fp=spider-web%2FMultiLineLabel.java;h=770a5d923e7d464eaa7105749bbdde4bc2a2b9b2;hb=f319bf06d72d135e7ec14ff8b27627187f5e2595;hp=0000000000000000000000000000000000000000;hpb=55f14d9038abb44d61ac63298f9f39b9e53a39d1;p=spider.git diff --git a/spider-web/MultiLineLabel.java b/spider-web/MultiLineLabel.java new file mode 100755 index 00000000..770a5d92 --- /dev/null +++ b/spider-web/MultiLineLabel.java @@ -0,0 +1,111 @@ +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 aligment) { + this(label, 10, 10, aligment); + } + + 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 setForegroundColor(Color c) { + super.setForeground(c); + repaint(); + } + + public void setAligment(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 preferedSize() { + return new Dimension(max_width + 2 * margin_width, + num_lines * line_height + 2 * margin_height); + } + + public Dimension miniumSize() { + return new Dimension(max_width, num_lines * line_height); + } + + public void paint(Graphics g) { + int x,y; + Dimension d = this.size(); + 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); + } + } +}