import java.awt.*; import java.util.*; // a nice little component from O'Reilly 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; public MultiLineLabel(String label, int mw, int mh, int a) { newLabel(label); setMarginWidth(mw); setMarginHeight(mh); setAlignment(a); } public MultiLineLabel(String label, int alignment) { this(label,10,10,alignment); } public MultiLineLabel(String label) { this(label,10,10,LEFT); } public MultiLineLabel() { this("",10,10,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 max_width) max_width=line_widths[i]; } } 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 preferredSize() { return new Dimension(max_width+2*margin_width, num_lines*line_height+2*margin_height); } public Dimension minimumSize() { 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