package gui;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.geom.AffineTransform;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class Vehicle extends JLabel {
private static final long serialVersionUID = -3979905387344521236L;
AffineTransform at = new AffineTransform();
Point gridCenter = new Point();
Point position = new Point();
int circleSize;
Color carColor;
int resolutionFactor;
Long vecID;
transient Image messagein;
transient Image messageout;
boolean receivedData;
int imageShownCounter;
public enum CarColor {
Blue, Red, Black, Grey
}
public Vehicle(long vehicleID,CarColor color) {
vecID = vehicleID;
Icon car;
switch (color) {
case Blue:
carColor = Color.BLUE;
car = new ImageIcon(getClass().getResource("/gui/resources/bluecar.png"));
break;
case Red:
carColor = Color.RED;
car = new ImageIcon(getClass().getResource("/gui/resources/redcar.png"));
break;
case Black:
carColor = Color.BLACK;
car = new ImageIcon(getClass().getResource("/gui/resources/blackcar.png"));
break;
case Grey:
carColor = Color.GRAY;
car = new ImageIcon(getClass().getResource("/gui/resources/greycar.png"));
break;
default:
carColor = Color.RED;
car = new ImageIcon(getClass().getResource("/gui/resources/redcar.png"));
break;
}
this.setIcon(car);
messagein = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/gui/resources/messagein.png"));
}
/**
* @return the vechicleID
*/
public Long getVechicleID() {
return vecID;
}
/**
* @return the carColor
*/
public Color getCarColor() {
return carColor;
}
public void SetDirection(int direction) {
switch (direction) {
case EAST:
at.setToRotation(Math.toRadians(0));
break;
case WEST:
at.setToRotation(Math.toRadians(180), 40, 40);
break;
case NORTH:
at.setToRotation(Math.toRadians(270), 40, 40);
break;
case SOUTH:
at.setToRotation(Math.toRadians(90), 40, 40);
break;
}
}
public void SetPosition(int x, int y) {
position.x = gridCenter.x + x * resolutionFactor;
position.y = gridCenter.y - y * resolutionFactor;
this.setLocation(position.x , position.y);
repaint();
}
/**
* @return the position converted to screen coordinates
*/
public Point GetPosition() {
return position;
}
/**
* @return the range converted to screen coordinates
*/
public int GetRange()
{
return circleSize;
}
public void SetReceivedData()
{
receivedData = true;
imageShownCounter = 30;
}
public void GridSizeChanged() {
Dimension dim = this.getParent().getSize();
//set coordinate origin as center screen. -30 is to center car image
gridCenter.setLocation(dim.getWidth() / 2 - 30, dim.getHeight() / 2 - 30);
//calc step in model to move on screen. Grid_size indicate one positive axis,
//but screen has both positive and negative, thus times 2
resolutionFactor = (int) (dim.getHeight() / (Model.GRID_SIZE * 2));
//static step size, meaning resize gives more space
//resolutionFactor = 10;
circleSize = resolutionFactor * 2 * Model.VEHICLE_RANGE;
this.setLocation(position.x , position.y);
}
transient Graphics2D g2;
@Override
protected void paintComponent(Graphics g) {
g2 = (Graphics2D) g;
g2.transform(at);
super.paintComponent(g);
if(receivedData)
{
g2.drawImage(messagein, 0, 0, null);
imageShownCounter--;
if(imageShownCounter <= 0)
{
receivedData = false;
}
}
}
}
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet)
¤
|
Haftungshinweis
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.
|