📄 elevthread.java
字号:
package elevator;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
import javax.swing.border.MatteBorder;
public class ElevThread extends JPanel implements Runnable {
private int stat;//-1:下 1:上 0:静止
private static int floornum;
private int nowpos;
private int despos;
private boolean[] numstat;
private Thread thread;
JButton[] elevbtn;
JLabel dispfloor;
public ElevThread() {
floornum = ElevFrame.getFloorNum();
stat = 0;
nowpos = 0;
despos = 0;
numstat = new boolean[floornum];
for (int i = 0; i < numstat.length; i++) {
numstat[i] = false;
}
thread = new Thread(this);
setLayout(new GridLayout(floornum + 1, 2));
this.setBorder(new MatteBorder(2, 80, 2, 2, Color.LIGHT_GRAY));
elevbtn = new JButton[floornum];
dispfloor = new JLabel("楼层号", SwingConstants.CENTER);
this.add(dispfloor);
MouseListener numListener = new NumButtonPressed();
for (int j=elevbtn.length-1; j >= 0; j--)
{
elevbtn[j] = new JButton(String.valueOf(j + 1));
elevbtn[j].addMouseListener(numListener);
elevbtn[j].setBackground(Color.WHITE);
this.add(elevbtn[j]);
}
elevbtn[nowpos].setBackground(Color.CYAN);
}
class NumButtonPressed extends MouseAdapter implements MouseListener {
public void mousePressed(MouseEvent e) {
for (int i = 0; i < elevbtn.length; i++) {
if (e.getSource() == elevbtn[i]) {
numstat[i] = true;
elevbtn[i].setBackground(Color.DARK_GRAY);
if (stat == 0) {
despos = i;
}
if (stat == 1) {
despos = getMaxPressedNum();
}
if (stat == -1) {
despos = getMinPressedNum();
}
}
}
}
}
public void run() {
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (stat == 1 || stat == -1) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
stat = 0;
}
if (despos > nowpos) {
stat = 1;
moveUp();
stat = 0;
} else if (despos < nowpos) {
stat = -1;
moveDn();
stat = 0;
}
}
}
public void moveUp() {
int oldpos = nowpos;
for (int i = nowpos + 1; i <= despos; i++) {
try {
elevbtn[i].setText("上行");
elevbtn[i].setBackground(Color.CYAN);
Thread.sleep(600);
elevbtn[i].setText(String.valueOf(i+1));
elevbtn[i].setBackground(Color.WHITE);
if (i > oldpos) {
elevbtn[i - 1].setBackground(Color.WHITE);
}
if (numstat[i]) {
elevbtn[i].setText("开门");
elevbtn[i].setBackground(Color.CYAN);
Thread.sleep(1500);
elevbtn[i].setText("关门");
Thread.sleep(1000);
elevbtn[i].setText(String.valueOf(i+1));
}
nowpos = i;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
clearState();
}
public void moveDn() {
int oldpos = nowpos;
for (int i = nowpos - 1; i >= despos; i--) {
try {
elevbtn[i].setText("下行");
elevbtn[i].setBackground(Color.CYAN);
Thread.sleep(600);
elevbtn[i].setText(String.valueOf(i+1));
elevbtn[i].setBackground(Color.WHITE);
if (i < oldpos) {
elevbtn[i + 1].setBackground(Color.WHITE);
}
if (numstat[i]) {
elevbtn[i].setText("开门");
elevbtn[i].setBackground(Color.CYAN);
Thread.sleep(1500);
elevbtn[i].setText("关门");
Thread.sleep(1000);
elevbtn[i].setText(String.valueOf(i+1));
}
nowpos = i;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
clearState();
}
public Thread getThread() {
return thread;
}
private int getMinPressedNum() {
int min = 0;
for (int i = 0; i < numstat.length; i++) {
if (numstat[i]) {
min = i;
break;
}
}
return min;
}
private int getMaxPressedNum() {
int max = 0;
for (int i = numstat.length - 1; i >= 0; i--) {
if (numstat[i]) {
max = i;
break;
}
}
return max;
}
private void clearState() {
for (int i = 0; i < numstat.length; i++) {
if (numstat[i]) {
numstat[i] = false;
}
}
}
public void setDesPos(int i) {
if (stat == 0) {
despos = i;
numstat[i] = true;
if (nowpos > despos) {
stat = -1;
}
if (nowpos < despos) {
stat = 1;
}
}
if (stat == 1 && i > despos) {
despos = i;
numstat[i] = true;
}
if (stat == -1 && i < despos) {
despos = i;
numstat[i] = true;
}
}
public int getnowpos() {
return nowpos;
}
public boolean isStill() {
return stat == 0;
}
public boolean isUp() {
return stat == 1;
}
public boolean isDown() {
return stat == -1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -