0

私はアプレットでスマイリーフェイスを作成しました..今私が欲しいのは、スマイリーの上にマウスを移動すると悲しい顔に変わるということです....私はそれを取得していません(イベントプログラミングの初心者) ... . それで、次に何をすべきか提案してください.....

これがSmileyの私のコードです->>>

smiley.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)
       {

         } 

         } 
4

2 に答える 2

1

ある時点で、リスナーをアプレットに登録する必要があります。

Component.addMouseListenerを参照してください。

initorstartメソッドの追加で試してください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) {
        }
    }
}
于 2012-10-04T07:11:27.340 に答える
0

あなたのスマイリーを再描画するコードをmouseEntered()andに入れますmouseExited(): mouseEntered()「他の」顔mouseExited()を描画し、同じ顔を再度描画する必要があります。

于 2012-10-04T07:11:37.540 に答える