如何在java中停止并开始弹跳球

时间:2016-05-12 15:19:54

标签: java

我只是想知道如何操纵java中的按钮使弹跳球停止,然后开始。我尝试使用命令编写if else语句来启动线程,并尝试使用命令来停止它。但是,这没有用。有人可以帮助我吗?这是我的代码:



package javaapplication1;

import java.awt.*;
import java.applet.*;
import java.applet.Applet;
import java.awt.event.*;

public class BouncingBallOriginal extends Applet implements Runnable, ActionListener
{
    Thread t=new Thread(this); /* declare and initialize a new thread */
    int x = 0;
    int y = 0;
	  
    int countX = 0;
    int countY = 0;
          
    Button button1;           //space bar
    Button button2;

    public void init()
    {
        setSize(600,350);
        t.start(); /* starts the thread */
	
        setBackground(Color.blue);
       
        button1 = new Button("Button 1");
        add(button1);
        button1.addActionListener(this);

        button2 = new Button("Button 2");
        add(button2);
        button2.addActionListener(this);
    }

    private void incrementX()  { x += 10;  }
    private void decrementX()  { x -= 10;  }
    private void incrementY()  { y += 10;  }
    private void decrementY()  { y -= 10;  }
	  
    public void run()
    {
        try
        {
            for(int i = 1; i > 0; i++)
            {
                Thread.sleep(200);
                repaint();
            }
        }
        catch(InterruptedException e)
        {
            //do nothing!
        }
    }
  
    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() == button1) 
        {
            System.out.println("Button 1 was pressed");
        }	
        else
        {
            System.out.println("Button 2 was pressed");
        }		
    }


    public void paint(Graphics g)
    {
        g.setColor(Color.yellow);
        g.fillOval(x, y, 20, 20);
     
        if(countX< (getSize().width / 10) - 1)
        {
            incrementX();
            countX++;            
        }

        if(countX >= (getSize().width / 10) - 1)
        {
            decrementX();
            countX++;
        }

        if(countX >= (getSize().width / 5) - 2)
        {
            countX=0;
        }

        if(countY < (getSize().height / 10) - 1)
        {
            incrementY();
            countY++;
        }

        if(countY >= (getSize().height / 10) - 1)
        {
            decrementY();
            countY++;
        }

        if(countY >= (getSize().height / 5) - 2)
        {
            countY=0;
        }
    }
}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

你可以这样做的方式是

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class BallControl extends JPanel {
  private Ball ball = new Ball();
  private JButton jbtSuspend = new JButton("Suspend");
  private JButton jbtResume = new JButton("Resume");
  private JScrollBar jsbDelay = new JScrollBar();

  public BallControl() {
    // Group buttons in a panel
    JPanel panel = new JPanel();
    panel.add(jbtSuspend);
    panel.add(jbtResume);

    // Add ball and buttons to the panel
    ball.setBorder(new javax.swing.border.LineBorder(Color.red));
    jsbDelay.setOrientation(JScrollBar.HORIZONTAL);
    ball.setDelay(jsbDelay.getMaximum());
    setLayout(new BorderLayout());
    add(jsbDelay, BorderLayout.NORTH);
    add(ball, BorderLayout.CENTER);
    add(panel, BorderLayout.SOUTH);

    // Register listeners
    jbtSuspend.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        ball.suspend();
      }
    });
    jbtResume.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        ball.resume();
      }
    });
    jsbDelay.addAdjustmentListener(new AdjustmentListener() {
      public void adjustmentValueChanged(AdjustmentEvent e) {
        ball.setDelay(jsbDelay.getMaximum() - e.getValue());
      }
    });
  }
}

答案 1 :(得分:0)

如果您正在谈论移动对象,请忘记线程。你通过将其位置改变一定值来移动你的球,让它称之为速度。你应该停止你的球的方法是当按下一个键而不是停止线程时将其速度设置为零。