(WindowListener+paint) issue
i tried this but it didn't work .. i wanna draw a smiley face when the window is active and a sad face when it's not .. olz any help !!
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
publicclass SmileFrownextends JFrame
{
JFrame frm =new JFrame("Smily Face");
publicstaticfinalint WINDOW_WIDTH = 400;
publicstaticfinalint WINDOW_HEIGHT = 400;
publicstaticfinalint FACE_DIAMETER = 200;
publicstaticfinalint X_FACE = 100;
publicstaticfinalint Y_FACE = 100;
publicstaticfinalint EYE_WIDTH = 20;
publicstaticfinalint EYE_HEIGHT = 10;
publicstaticfinalint X_RIGHT_EYE = X_FACE + 55;
publicstaticfinalint Y_RIGHT_EYE = Y_FACE + 60;
publicstaticfinalint X_LEFT_EYE = X_FACE + 130;
publicstaticfinalint Y_LEFT_EYE = Y_FACE + 60;
publicstaticfinalint MOUTH_WIDTH = 100;
publicstaticfinalint MOUTH_HEIGHT = 50;
publicstaticfinalint X_MOUTH = X_FACE + 50;
publicstaticfinalint Y_MOUTH = Y_FACE + 100;
publicstaticfinalint MOUTH_START_ANGLE = 180;
publicstaticfinalint MOUTH_START_ANGLE2 = 0;
publicstaticfinalint MOUTH_ARC_SWEEP = -180;
int chooser = 0;
public SmileFrown ()
{
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
setVisible(true);
addWindowListener(new sfrown( ));
}
privateclass sfrownimplements WindowListener
{
publicvoid windowOpened(WindowEvent e)
{}
publicvoid windowClosing(WindowEvent e)
{}
publicvoid windowClosed(WindowEvent e)
{}
publicvoid windowIconified(WindowEvent e)
{}
publicvoid windowDeiconified(WindowEvent e)
{}
publicvoid windowActivated(WindowEvent e)
{
chooser = 1;
repaint();
}
publicvoid windowDeactivated(WindowEvent e)
{
chooser = 2;
frm.setTitle("Frowny Face");
repaint();
}
}
publicvoid paint(Graphics g)
{
if (chooser == 1)
{
g.drawOval(X_FACE, Y_FACE, FACE_DIAMETER, FACE_DIAMETER);
g.fillOval(X_RIGHT_EYE, Y_RIGHT_EYE, EYE_WIDTH, EYE_HEIGHT);
g.fillOval(X_LEFT_EYE, Y_LEFT_EYE, EYE_WIDTH, EYE_HEIGHT);
g.drawArc(X_MOUTH, Y_MOUTH, MOUTH_WIDTH, MOUTH_HEIGHT,
MOUTH_START_ANGLE, MOUTH_ARC_SWEEP);
}
elseif (chooser == 2)
{
g.drawOval(X_FACE, Y_FACE, FACE_DIAMETER, FACE_DIAMETER);
g.fillOval(X_RIGHT_EYE, Y_RIGHT_EYE, EYE_WIDTH, EYE_HEIGHT);
g.fillOval(X_LEFT_EYE, Y_LEFT_EYE, EYE_WIDTH, EYE_HEIGHT);
g.drawArc(X_MOUTH, Y_MOUTH, MOUTH_WIDTH, MOUTH_HEIGHT,
MOUTH_START_ANGLE2, MOUTH_ARC_SWEEP);
}
}
publicstaticvoid main (String [] args)
{
SmileFrown sf =new SmileFrown();
}
}
[7272 byte] By [
DaVeeCka] at [2007-11-26 15:23:44]

Few changes:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SmileFrown extends JFrame
{
// remove creation of unneeded JFrame
public static final int WINDOW_WIDTH = 400;
public static final int WINDOW_HEIGHT = 400;
public static final int FACE_DIAMETER = 200;
public static final int X_FACE = 100;
public static final int Y_FACE = 100;
public static final int EYE_WIDTH = 20;
public static final int EYE_HEIGHT = 10;
public static final int X_RIGHT_EYE = X_FACE + 55;
public static final int Y_RIGHT_EYE = Y_FACE + 60;
public static final int X_LEFT_EYE = X_FACE + 130;
public static final int Y_LEFT_EYE = Y_FACE + 60;
public static final int MOUTH_WIDTH = 100;
public static final int MOUTH_HEIGHT = 50;
public static final int X_MOUTH = X_FACE + 50;
public static final int Y_MOUTH = Y_FACE + 100;
public static final int MOUTH_START_ANGLE = 180;
public static final int MOUTH_START_ANGLE2 = 0;
public static final int MOUTH_ARC_SWEEP = -180;
int chooser = 0;
public SmileFrown ()
{
super("Smily Face");// Added
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
setVisible(true);
addWindowListener(new sfrown( ));
}
private class sfrown implements WindowListener
{
public void windowOpened(WindowEvent e)
{}
public void windowClosing(WindowEvent e)
{}
public void windowClosed(WindowEvent e)
{}
public void windowIconified(WindowEvent e)
{}
public void windowDeiconified(WindowEvent e)
{}
public void windowActivated(WindowEvent e)
{
chooser = 1;
setTitle("Smily Face"); // Added
repaint();
}
public void windowDeactivated(WindowEvent e)
{
chooser = 2;
setTitle("Frowny Face"); // Changed
repaint();
}
}
public void paint(Graphics g)
{
g.setColor(Color.CYAN); // Color of your choice.
g.fillRect(0,0,getWidth(),getHeight()); // Added
g.setColor(Color.BLACK); // Added
if (chooser == 2)// Reversed
{
g.drawOval(X_FACE, Y_FACE, FACE_DIAMETER, FACE_DIAMETER);
g.fillOval(X_RIGHT_EYE, Y_RIGHT_EYE, EYE_WIDTH, EYE_HEIGHT);
g.fillOval(X_LEFT_EYE, Y_LEFT_EYE, EYE_WIDTH, EYE_HEIGHT);
g.drawArc(X_MOUTH, Y_MOUTH, MOUTH_WIDTH, MOUTH_HEIGHT,
MOUTH_START_ANGLE, MOUTH_ARC_SWEEP);
}
else if (chooser == 1)// Reversed
{
g.drawOval(X_FACE, Y_FACE, FACE_DIAMETER, FACE_DIAMETER);
g.fillOval(X_RIGHT_EYE, Y_RIGHT_EYE, EYE_WIDTH, EYE_HEIGHT);
g.fillOval(X_LEFT_EYE, Y_LEFT_EYE, EYE_WIDTH, EYE_HEIGHT);
g.drawArc(X_MOUTH, Y_MOUTH, MOUTH_WIDTH, MOUTH_HEIGHT,
MOUTH_START_ANGLE2, MOUTH_ARC_SWEEP);
}
}
public static void main (String [] args)
{
SmileFrown sf = new SmileFrown();
}
}
thanks alot my friend .. i got it right in this code but there is one
problem which is when the i start execution the frame appers with
a sad face at the first time it appears .. i want it to be smiley when it first appears .. any help?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SmileFrown extends JFrame
{
public static final int WINDOW_WIDTH = 400;
public static final int WINDOW_HEIGHT = 400;
public static final int FACE_DIAMETER = 200;
public static final int X_FACE = 100;
public static final int Y_FACE = 100;
public static final int EYE_WIDTH = 20;
public static final int EYE_HEIGHT = 10;
public static final int X_RIGHT_EYE = X_FACE + 55;
public static final int Y_RIGHT_EYE = Y_FACE + 60;
public static final int X_LEFT_EYE = X_FACE + 130;
public static final int Y_LEFT_EYE = Y_FACE + 60;
public static final int MOUTH_WIDTH = 100;
public static final int MOUTH_HEIGHT = 50;
public static final int X_MOUTH = X_FACE + 50;
public static final int Y_MOUTH = Y_FACE + 100;
public static final int Y_MOUTH2 = Y_FACE + 125;
public static final int MOUTH_START_ANGLE = 180;
public static final int MOUTH_START_ANGLE2 = 0;
public static final int MOUTH_ARC_SWEEP = -180;
boolean status;
sFrownyPanel sfr = new sFrownyPanel();
public SmileFrown ()
{
super("Smiley Face");
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
add(sfr);
setVisible(true);
addWindowListener(new sfrown( ));
}
private class sfrown extends WindowAdapter
{
public void windowActivated(WindowEvent e)
{
status = true;
setTitle("Smiley Face");
repaint();
}
public void windowDeactivated(WindowEvent e)
{
status = false;
setTitle("Frowny Face");
repaint();
}
}
class sFrownyPanel extends JPanel
{
sFrownyPanel()
{
}
public void paint(Graphics g)
{
g.setColor(Color.BLACK);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(Color.WHITE);
g.drawOval(X_FACE, Y_FACE, FACE_DIAMETER, FACE_DIAMETER);
g.fillOval(X_RIGHT_EYE, Y_RIGHT_EYE, EYE_WIDTH, EYE_HEIGHT);
g.fillOval(X_LEFT_EYE, Y_LEFT_EYE, EYE_WIDTH, EYE_HEIGHT);
if (status == true)
g.drawArc(X_MOUTH, Y_MOUTH, MOUTH_WIDTH, MOUTH_HEIGHT,
MOUTH_START_ANGLE2, MOUTH_ARC_SWEEP);
else
{
g.drawArc(X_MOUTH, Y_MOUTH2, MOUTH_WIDTH, MOUTH_HEIGHT,
MOUTH_START_ANGLE, MOUTH_ARC_SWEEP);
}
}
}
public static void main (String [] args)
{
SmileFrown sf = new SmileFrown();
}
}
Sure, on what looks like line #34, change int chooser = 0; -to- int chooser = 1;~Bill
thank u so much my friend ..