【问题标题】:Applet event programming [closed]小程序事件编程[关闭]
【发布时间】:2012-09-25 04:11:06
【问题描述】:

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

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

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

         } 

         } 

【问题讨论】:

    标签: java graphics applet awt paint


    【解决方案1】:

    在某些时候,您需要在小程序中注册您的侦听器。

    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) {
            }
        }
    }
    

    【讨论】:

    • 感谢您的回复@Madprogrammer,但有什么方法可以改变 g.drawArc(75,95,50,50,180,180); 的值到 g.drawArc(75,95,50,50,300,300);当我将光标移到它上面时....那样会很容易....
    • 你应该更喜欢 AWT 组件的 Swing 组件。为什么?
    • @ankit 使用MouseEvent.getPoint提取表单鼠标事件的鼠标位置。使用 if 语句确定 iftgecursor 是否在规定的矩形内
    • 得到了解决方案......谢谢......
    【解决方案2】:

    将重新绘制笑脸的代码放入mouseEntered()mouseExited()mouseEntered() 应该绘制“其他”脸,mouseExited() 应该再次绘制同一张脸。

    【讨论】:

    • 请你在这里写代码给我看看..
    猜你喜欢
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2022-11-19
    • 2012-05-06
    • 2021-11-18
    • 2015-08-24
    相关资源
    最近更新 更多