2016-05-12 62 views
0

我只是想知道如何操作java中的按鈕來製作彈跳球,然後開始。我試着用一個命令寫一個if else語句來啓動線程,並且用一個命令來停止它。但是,這並不奏效。任何人都可能幫助我嗎?這裏是我的代碼:如何在java中停止並開始彈跳球

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; 
 
\t 
 
    int countX = 0; 
 
    int countY = 0; 
 
      
 
    Button button1;   //space bar 
 
    Button button2; 
 

 
    public void init() 
 
    { 
 
     setSize(600,350); 
 
     t.start(); /* starts the thread */ 
 
\t 
 
     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; } 
 
\t 
 
    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"); 
 
     } \t 
 
     else 
 
     { 
 
      System.out.println("Button 2 was pressed"); 
 
     } \t \t 
 
    } 
 

 

 
    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; 
 
     } 
 
    } 
 
}

+0

重複? http://stackoverflow.com/questions/16758346/how-pause-and-then-resume-a-thread – rleir

回答

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()); 
     } 
    }); 
    } 
} 
0

忘掉線程,如果你是在談論移動的物體。通過將位置改變一定的值來移動球,可以稱之爲速度。當按下鍵而不是停止線時,您應該停止球的方式是將速度設置爲零。