当前位置: 动力学知识库 > 问答 > 编程问答 >

Mouse pressed and released in java applet

问题描述:

My code below is for a checkers program. If the user either clicks on a stop button or holds the mouse, it stops, and the go button or mouse release moves the checkers from the beginning.

I am not able to figure out how to move the checkers from the same position that they were stopped at. Help Please!

import java.awt.Button;

import java.awt.Graphics;

import java.awt.Color;

import java.awt.Image;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

public class Checkers extends java.applet.Applet implements Runnable,

ActionListener {

Thread runner;

int xpos;

Image offscreenImg;

Graphics offscreenG;

Button goButton, stopButton, exitButton;

private ExitButtonHandler ebHandler;

public void init() {

// offscreenImg = createImage(getWidth(), getHeight());

offscreenImg = createImage(this.size().width, this.size().height);

offscreenG = offscreenImg.getGraphics();

setSize(200, 250);

addMouseListener(new Mouse());

goButton = new Button("Go");

goButton.setBounds(10, 200, 90, 20);

setLayout(null);

stopButton = new Button("Stop");

stopButton.setBounds(100, 200, 90, 20);

setLayout(null);

exitButton = new Button("Exit");

ebHandler = new ExitButtonHandler();

exitButton.addActionListener(ebHandler);

exitButton.setBounds(55, 220, 90, 20);

setLayout(null);

add(goButton);

add(stopButton);

add(exitButton);

stopButton.addActionListener(this);

goButton.addActionListener(this);

}

public void start() {

if (runner == null) {

runner = new Thread(this);

runner.start();

}

}

public void stop() {

if (runner != null) {

runner.stop();

runner = null;

}

}

public void run() {

while (true) {

for (xpos = 5; xpos <= 105; xpos += 4) {

repaint();

try {

Thread.sleep(100);

} catch (InterruptedException e) {

}

}

xpos = 5;

for (xpos = 105; xpos >= 5; xpos -= 4) {

repaint();

try {

Thread.sleep(100);

} catch (InterruptedException e) {

}

}

xpos = 5;

}

}

public void update(Graphics g) {

paint(g);

}

public void paint(Graphics g) {

// Draw background onto the buffer area

offscreenG.setColor(Color.blue);

offscreenG.fillRect(0, 0, 100, 100);

offscreenG.setColor(Color.red);

offscreenG.fillRect(0, 100, 100, 100);

offscreenG.setColor(Color.red);

offscreenG.fillRect(100, 0, 100, 100);

offscreenG.setColor(Color.blue);

offscreenG.fillRect(100, 100, 100, 100);

// Draw checker

offscreenG.setColor(Color.green);

offscreenG.fillOval(xpos, 5, 90, 90);

offscreenG.setColor(Color.yellow);

offscreenG.fillOval(-xpos + 110, 105, 90, 90);

// Now, transfer the entire buffer onto the screen

g.drawImage(offscreenImg, 0, 0, this);

}

public void destroy() {

offscreenG.dispose();

}

// Mouse events

public class Mouse extends MouseAdapter {

public void mousePressed(MouseEvent e) {

stop();

}

public void mouseReleased(MouseEvent e) {

start();

}

}

// Button events

public void actionPerformed(ActionEvent e) {

if (e.getSource() == stopButton) {

stop();

} else if (e.getSource() == goButton) {

start();

}

}

// exit button

public class ExitButtonHandler implements ActionListener {

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

}

}

网友答案:

You are recreating a new Thread which starts from the beginning every time you call the start function. Also, after you call stop you will not be able to "resume" where you left off.

You will want to change your Thread to use a flag of some type (boolean stopped;) and then change that flag when you call stop and start, so the Thread doesn't actually end but just "pauses." (stops moving, but is actually still running)

if (stopped) {
    //dont do stuff
}
else {
    //do stuff
}
分享给朋友:
您可能感兴趣的文章:
随机阅读: