java - 小程序事件编程

标签 java graphics applet awt paint

我在小程序中制作了一个笑脸..现在我想要的是,当我将鼠标移到笑脸上时它会变成悲伤的脸.... 我不明白(事件编程新手)...所以请建议我下一步该做什么...

这是我的笑脸代码->>>

笑脸.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 .

尝试在 initstart 方法中添加 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) {
        }
    }
}

关于java - 小程序事件编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12721933/

相关文章:

java - 设置理想的线程池大小

java - 如何在 Eclipse 中的 Java Applet 中每秒显示帧数?

java - 如何证明一个Applet是安全的?

java - 简单的 Java 小程序无法在 MacOS 上的 FireFox/Safari 中加载

java - JAXB 解码返回 'URI is not absolute' 错误

java - 删除水平进度条中的填充

java - 为什么我的 jbutton 不再添加自己?

delphi - Delphi 上的大位图

java - 获取 Graphics2D?

Java JFrame 绘制