Re: Problem with Timer object
tkthuc@gmail.com wrote:
Hi , Sorry for that mess . I use tab and space when I typed the code
into the Google window and at the end it displayed like that . My
problem is how to pause the elevator when it reachs a chosen floor
(picked by pressing one button on the button panel). My idea is to
use another Pause( contains another timer ) class to do this . When
the current floor is the destination floor , I use this code segment
Your code was still not compilable and I don't have the time to play
with it. I still think you should try a different approach rather than
all the timers. Animation can be tricky to get working well. I wrote
you an example of how I think you should approach your problem. Adding
pauses for door opening/closing should be just a matter of adding some
new states to the Direction enum and some more logic code to the run()
method and paint the doors.
Note: I used the European convention for the floors. The first floor
above the ground floor is 1.
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class test99 extends JPanel implements ActionListener, Runnable {
// start with car on fifth floor
volatile int Y = 150;
volatile int floor = 150;
enum Direction { UP, DOWN, STOP };
Direction dir = Direction.STOP;
public test99() {
setPreferredSize(new Dimension(200,200));
}
public void start() {
new Thread(this).start();
}
public void actionPerformed(ActionEvent ae) {
String ac = ae.getActionCommand();
if (ac.equals("4")) {
if (dir == Direction.STOP)
floor = 120;
if (Y < floor)
dir = Direction.UP;
else
dir = Direction.DOWN;
} else if (ac.equals("G")) {
if (dir == Direction.STOP) {
floor = 0;
if (Y > floor)
dir = Direction.DOWN;
}
}
}
public void run() {
while (true) {
// 25 frames per second delay
try {
Thread.sleep(40);
} catch (InterruptedException ie) { }
switch (dir) {
case UP: Y += 1; break;
case DOWN: Y -= 1; break;
case STOP: break;
}
// stop car if on correct floor
if (Y == floor)
dir = Direction.STOP;
repaint();
}
}
public void paintComponent(Graphics g2D) {
// need Graphics2D for the stroke
Graphics2D g = (Graphics2D)g2D;
// draw background
g.setColor(getBackground());
g.fillRect(0,0,getWidth(),getHeight());
// draw car
g.setColor(Color.BLUE);
g.fillRect(13,164-Y,19,22);
// draw shaft
g.setColor(getForeground());
Stroke s = g.getStroke();
g.setStroke(new BasicStroke(4.0f));
for (int i=0; i<6; i++)
g.drawRect(10,10+i*30,25,30);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
test99 t99 = new test99();
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(t99,BorderLayout.CENTER);
JPanel p = new JPanel();
JButton b = new JButton("4");
b.addActionListener(t99);
p.add(b);
b = new JButton("G");
b.addActionListener(t99);
p.add(b);
f.add(p,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
t99.start();
}
});
}
}
--
Knute Johnson
email s/nospam/knute2008/
--
Posted via NewsDemon.com - Premium Uncensored Newsgroup Service
------->>>>>>http://www.NewsDemon.com<<<<<<------
Unlimited Access, Anonymous Accounts, Uncensored Broadband Access