我在小程序中做了一个笑脸..现在我想要的是,当我将鼠标移到笑脸上时,它会变成悲伤的脸....我不明白(事件编程新手)....所以请建议我下一步该怎么做.....
这是我的笑脸代码>>>
笑脸.java
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class smiley extends Applet implements MouseListener
{
public void init()
{
}
public void paint(Graphics g)
{
g.setColor(Color.yellow);
g.fillOval(40,40,120,150);
g.setColor(Color.black);
g.drawOval(61,75,20,20);
g.setColor(Color.black);
g.drawOval(115,75,20,20);
g.fillOval(68,81,10,10);
g.fillOval(121,81,10,10);
g.setColor(Color.black);
g.drawArc(75,95,50,50,180,180);
}
public void mouseEntered(MouseEvent me)
{
}
public void mouseExited(MouseEvent me)
{
}
public void mouseClicked(MouseEvent me)
{
}
public void mousePressed(MouseEvent me)
{
}
public void mouseReleased(MouseEvent me)
{
}
}
在某些时候,您需要向小程序注册侦听器。
请参阅 Component.addMouseListener。
尝试使用init
或start
方法添加addMouseListener(this)
一些指针。
- 您应该始终致电
super.paint()
. 绘画方法在幕后做了很多重要的工作 - 应尽可能避免重写顶级组件的
paint
方法。 它们不是双缓冲的,并且在重绘时往往会"闪烁"。 - 如果可以,您应该优先选择AWT组件的Swing组件
因为我知道问题会来...
public class SadApplet extends JApplet {
private boolean mouseOver = false;
public void init() {
setLayout(new BorderLayout());
add(new FacePane());
}
protected class FacePane extends JPanel implements MouseListener {
public FacePane() {
addMouseListener(this);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.yellow);
g.fillOval(40, 40, 120, 150);
g.setColor(Color.black);
g.drawOval(61, 75, 20, 20);
g.setColor(Color.black);
g.drawOval(115, 75, 20, 20);
g.fillOval(68, 81, 10, 10);
g.fillOval(121, 81, 10, 10);
g.setColor(Color.black);
if (!mouseOver) {
g.drawArc(75, 95, 50, 50, 180, 180);
} else {
g.drawArc(75, 95 + 50, 50, 50, 180, -180);
}
}
public void mouseEntered(MouseEvent me) {
mouseOver = true;
repaint();
}
public void mouseExited(MouseEvent me) {
mouseOver = false;
repaint();
}
public void mouseClicked(MouseEvent me) {
}
public void mousePressed(MouseEvent me) {
}
public void mouseReleased(MouseEvent me) {
}
}
}
将重新绘制你的 smily 的代码放入 mouseEntered()
和 mouseExited()
:mouseEntered()
应该画"其他"面,mouseExited()
应该再次画同样的面。