[Firebug-cvs] firebug/project/zaurus/vu/isis/nest/zaurus ZCanvas.java,NONE,1.1 ZMain.java,1.2,1.3
Brought to you by:
doolin
From: <do...@us...> - 2003-07-21 15:44:06
|
Update of /cvsroot/firebug/firebug/project/zaurus/vu/isis/nest/zaurus In directory sc8-pr-cvs1:/tmp/cvs-serv5386/vu/isis/nest/zaurus Modified Files: ZMain.java Added Files: ZCanvas.java Log Message: Added a canvas class for deriving zaurus widgets. --- NEW FILE: ZCanvas.java --- package isis.nest.zaurus; // This example is from the book _Java in a Nutshell_ by David Flanagan. // Written by David Flanagan. Copyright (c) 1996 O'Reilly & Associates. // You may study, use, modify, and distribute this example for any purpose. // This example is provided WITHOUT WARRANTY either expressed or implied. import java.awt. *; import java.util. *; public class ZCanvas extends Canvas { public static final int LEFT = 0; // Alignment constants public static final int CENTER = 1; public static final int RIGHT = 2; protected String[] lines; // The lines of text to display protected int num_lines; // The number of lines protected int margin_width; // Left and right margins protected int margin_height; // Top and bottom margins protected int line_height; // Total height of the font protected int line_ascent; // Font height above baseline protected int[] line_widths; // How wide each line is protected int max_width; // The width of the widest line protected int alignment = LEFT; // The alignment of the text. // This method breaks a specified label up into an array of lines. // It uses the StringTokenizer utility class. 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 (); } // This method figures out how the font is, and how wide each // line of the label is, and how wide the widest line is. protected void measure () { FontMetrics fm = this.getFontMetrics (this.getFont ()); // If we don't have font metrics yet, just return. 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]; } } // Here are four versions of the cosntrutor. // Break the label up into separate lines, and save the other info. public ZCanvas (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 ZCanvas (String label, int margin_width, int margin_height) { this (label, margin_width, margin_height, LEFT); } public ZCanvas (String label, int alignment) { this (label, 10, 10, alignment); } public ZCanvas (String label) { this (label, 10, 10, LEFT); } // Methods to set the various attributes of the component 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; } // This method is invoked after our Canvas is first created // but before it can actually be displayed. After we've // invoked our superclass's addNotify() method, we have font // metrics and can successfully call measure() to figure out // how big the label is. public void addNotify () { super.addNotify (); measure (); } // This method is called by a layout manager when it wants to // know how big we'd like to be. public Dimension getPreferredSize () { return new Dimension (max_width + 2 * margin_width, num_lines * line_height + 2 * margin_height); } // This method is called when the layout manager wants to know // the bare minimum amount of space we need to get by. public Dimension getMinimumSize () { return new Dimension (max_width, num_lines * line_height); } // This method draws the label (applets use the same method). // Note that it handles the margins and the alignment, but that // it doesn't have to worry about the color or font--the superclass // takes care of setting those in the Graphics object we're passed. 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); } } } Index: ZMain.java =================================================================== RCS file: /cvsroot/firebug/firebug/project/zaurus/vu/isis/nest/zaurus/ZMain.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ZMain.java 16 Jul 2003 15:55:43 -0000 1.2 --- ZMain.java 21 Jul 2003 15:44:03 -0000 1.3 *************** *** 42,53 **** Canvas canvas = new Canvas(); canvas.setSize(cwidth,cheight); ! Color color = new Color(1,0,0); canvas.setBackground(color); ! panel.add(canvas); ! ! zf.repaint(); } } --- 42,59 ---- Canvas canvas = new Canvas(); canvas.setSize(cwidth,cheight); ! Color color = new Color((float).5,(float).55,(float).5); canvas.setBackground(color); ! //panel.add(canvas); ! //canvas.repaint(); + ZCanvas zcanvas = new ZCanvas("Foobar"); + zcanvas.setSize(cwidth-50,cheight-50); + zcanvas.setBackground(color); + panel.add(zcanvas); + zcanvas.repaint(); } } + + |