编写一个Java Applet程序,在Applet内部现实一个蓝色反弹球的程序。
通过mousePressed时间使该球开始运动,当球撞击Applet边框时,它应从边框弹回并以相反的方向运动。

解决方案 »

  1.   


    import java.applet.Applet;
    import java.awt.Color;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.event.MouseEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.ArrayList;
    import java.util.List;import java.awt.*;
    import java.awt.event.*;
    import java.awt.Graphics;public class Main extends Applet implements Runnable,MouseListener{
        int x = 60, y = 100;
        int dx = 5, dy = 5;
        int rgb = 0;
        Color color = new Color((int)(Math.random() * 0xFFFFFF));    public static void main(String[] args) {
            new Main();
        }    public Main(){
            setSize(350, 350);
            setBackground(Color.gray);
            this.addMouseListener(this);
            this.setLayout(null);
            setVisible(true);
            
            
        }    public void doColor() {
            rgb = (int)(Math.random()*0xFFFFFF);
            color = new Color(rgb);
        }    public void run() {
            while (true) {
                if (x <= 0) {
                    dx = -dx;
                    dy = -dy;
                    doColor();
                }else if ((x + 50) >= this.getWidth()) {
                 dx = -dx;
                    dy = -dy;
                    doColor();
                }
                if (y <= 0) {
                 dx = -dx;
                    dy = -dy;
                    doColor();
                }else if ((y + 50) >= this.getHeight()){
                 dx = -dx;
                    dy = -dy;
                    doColor();
                }
                x = x + dx;
                y = y + dy;
                try {
                    Thread.sleep(50);
                    repaint();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        public void paint(Graphics g) {
            Color c = g.getColor();
            g.setColor(color);
            g.fillOval(x, y, 50, 50);
            g.setColor(c);
        }

        @Override
    public void mouseClicked(MouseEvent e) {

    } @Override
    public void mousePressed(MouseEvent e){
    System.out.print(this);
    new Thread(this).start();
    } @Override
    public void mouseReleased(MouseEvent e) {

    } @Override
    public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub

    } @Override
    public void mouseExited(MouseEvent e) {

    }
    }
    仅供参考。
      

  2.   

    try again 能否解释哈为甚么这个接口没有写成适配器,我刚才写成了内部类的形式之后new Thread(this).start();报错为甚么?先谢过了
      

  3.   

    可以啊。多写一个类文件就是了,只是我那种,extends只能继承一个父类。
      

  4.   


    内部类监听的时候,this.addMouseListener(this)中第二个this报错,还有内部类中不能有new Thread(this).start(this);不能启动线程
      

  5.   

    this指的是当前对象,你都写了内部类了,不能用this.就应该是这样的。
    this.addMouseListener(this.new 内部类名());
    东西别学死了。什么是对象你有点混淆。照你这样要求继承MouseAdapter就完美了?写成实现MouseListener就可以了。别把学习的重点搞反了。
      

  6.   


    import java.applet.Applet;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.event.MouseEvent;
    import java.awt.event.*;public class Main extends Applet implements Runnable{
        int x = 60, y = 100;
        int dx = 5, dy = 5;
        int rgb = 0;
        Color color = new Color((int)(Math.random() * 0xFFFFFF));
        final Thread moveThread;//加final
        public static void main(String[] args) {
            new Main();
        }    public Main(){
         moveThread = new Thread(this);
            setSize(350, 350);
            setBackground(Color.gray);
            this.addMouseListener(new MouseAdapter(){
    @Override
    public void mousePressed(MouseEvent e) {
    System.out.println(moveThread.getState().toString());
    if(moveThread.getState().equals(Thread.State.NEW)){
      moveThread.start();
    }
    }
            });
            this.setLayout(null);
            setVisible(true);
        }    public void doColor() {
            rgb = (int)(Math.random()*0xFFFFFF);
            color = new Color(rgb);
        }    public void run() {
            while (true) {
                if (x <= 0) {
                    dx = -dx;
                    doColor();
                }else if ((x + 50) >= this.getWidth()) {
                 dx = -dx;
                    doColor();
                }
                if (y <= 0) {
                    dy = -dy;
                    doColor();
                }else if ((y + 50) >= this.getHeight()){
                    dy = -dy;
                    doColor();
                }
                x = x + dx;
                y = y + dy;
                try {
                    Thread.sleep(50);
                    repaint();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        public void paint(Graphics g) {
            Color c = g.getColor();
            g.setColor(color);
            g.fillOval(x, y, 50, 50);
            g.setColor(c);
        }
    }