// Fig. 14.2: CustomPanel2.java // A customized JPanel class. import java.io.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class CustomPanel2 extends JPanel { public final static int CIRCLE = 1, SQUARE = 2; private int shape; private int oldQuadrant; public CustomPanel2 () { oldQuadrant = 0; addMouseMotionListener( new MouseMotionAdapter () { public void mouseMoved (MouseEvent event) { int quadrant = 0; int x = event.getX(); int y = event.getY(); int wid = getWidth (); int hgt = getHeight (); if (x < wid/2 && y < hgt/2) quadrant = 1; else if (x < wid/2) quadrant = 2; else if (y < hgt/2) quadrant = 3; else quadrant = 4; if (quadrant != oldQuadrant) { drawQ (oldQuadrant, getBackground() ); drawQ (quadrant, Color.BLACK ); oldQuadrant = quadrant; } } } ); addMouseListener ( new MouseAdapter () { public void mouseClicked (MouseEvent event) { Graphics g = getGraphics (); int x = event.getX(); int y = event.getY(); g.drawLine (0,0,x,y); } } ); } // use shape to draw an oval or rectangl public void paintComponent( Graphics g ) { super.paintComponent( g ); drawQ (g, oldQuadrant, Color.BLACK ); /*if ( shape == CIRCLE ) g.fillOval( 50, 10, 60, 60 ); else if ( shape == SQUARE ) g.fillRect( 50, 10, 60, 60 ); */ } // set shape value and repaint CustomPanel2 public void draw( int shapeToDraw ) { shape = shapeToDraw; repaint(); } public void drawQ (int quad, Color c) { Graphics g = getGraphics (); int wid = getWidth (); int hgt = getHeight (); int sx = 0, sy = 0; int ex = wid/2 - 10, ey = hgt/2 - 10; // System.out.println("OldQuad: " + quad + ", " + wid + ", " + hgt); if (quad == 1) { sx = 5; sy = 5; } else if (quad == 2) { sx = 5; sy = hgt/2 + 5; } else if (quad == 3) { sx = wid/2 + 5; sy = 5; } else if (quad == 4) { sx = wid/2 + 5; sy = hgt/2 + 5; } g.setColor (c); if ( shape == CIRCLE ) g.fillOval( sx, sy, ex, ey ); else if ( shape == SQUARE ) g.fillRect( sx, sy, ex, ey ); //g.fillOval (sx, sy, ex, ey); } public void drawQ (Graphics g, int quad, Color c) { //Graphics g = getGraphics (); int wid = getWidth (); int hgt = getHeight (); int sx = 0, sy = 0; int ex = wid/2 - 10, ey = hgt/2 - 10; // System.out.println("OldQuad: " + quad + ", " + wid + ", " + hgt); if (quad == 1) { sx = 5; sy = 5; } else if (quad == 2) { sx = 5; sy = hgt/2 + 5; } else if (quad == 3) { sx = wid/2 + 5; sy = 5; } else if (quad == 4) { sx = wid/2 + 5; sy = hgt/2 + 5; } g.setColor (c); if ( shape == CIRCLE ) g.fillOval( sx, sy, ex, ey ); else if ( shape == SQUARE ) g.fillRect( sx, sy, ex, ey ); //g.fillOval (sx, sy, ex, ey); } } // end class CustomPanel2 /************************************************************************** * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and * * Prentice Hall. All Rights Reserved. * * * * DISCLAIMER: The authors and publisher of this book have used their * * best efforts in preparing the book. These efforts include the * * development, research, and testing of the theories and programs * * to determine their effectiveness. The authors and publisher make * * no warranty of any kind, expressed or implied, with regard to these * * programs or to the documentation contained in these books. The authors * * and publisher shall not be liable in any event for incidental or * * consequential damages in connection with, or arising out of, the * * furnishing, performance, or use of these programs. * *************************************************************************/