import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.util.LinkedList;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
public class CubeDisplay extends JComponent implements MouseListener{
public static final long serialVersionUID = 54L;
private int n; //n by n by n cube
private int width, height;
private LinkedList<GridShape> ll_GridShapes = new LinkedList<GridShape>();
private PointDouble[][][] points;
private LED_Shapes[] ar_leds;
private boolean showLEDs = true;
private boolean showGrid = true;
private boolean ledChanged = true;
protected boolean imageChanged = false;
private boolean gridChanged = true;
protected int duration = 1000;
private Color backgroundColor = Color.white;
public CubeDisplay(){
super();
this.n = LedCubeSimulator.n;
enableEvents(AWTEvent.COMPONENT_EVENT_MASK);
addMouseListener(this);
}
private void calculatePoints(){
//rechne rechne
//berechne punkt-koordinaten
}
/**
* erzeugt die linien des gitters und speichert sie in der linkedlist
*/
private void createGrid(){
Color cfront = Color.black;
ll_GridShapes.clear();
for (int i = 0; i<n;i++){
for (int j = 0;j<n;j++){
//linien hinzufuegen
ll_GridShapes.add(foo)
}
}
gridChanged = true;
}
private void createLEDs(){
//kreisformen hinzufuegen
ar_leds = new LED_Shapes[(n*n*n)];
ledChanged = true;
}
public void setLEDBits(String in){
//farben von bestehenden formen aus dem array ar_led veraendern
//und neu zeichnen
ledChanged = true;
repaint();
}else{
System.out.println("setLEDBits ist nicht ok");
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (gridChanged || ledChanged){
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(backgroundColor);
g2d.fill(new Rectangle2D.Float(0,0,getWidth(),getHeight()));
if(showGrid && ll_GridShapes.size() >0){
for(int i = 0; i<ll_GridShapes.size(); i++){
g2d.setColor(ll_GridShapes.get(i).getColor());
g2d.setStroke(ll_GridShapes.get(i).getBs());
g2d.draw(ll_GridShapes.get(i).getShape());
}
gridChanged = false;
}
if(showLEDs && ar_leds.length>0){
for (int i = 0; i<(n*n*n);i++){
g2d.setColor(ar_leds[i].getColor());
g2d.setStroke(ar_leds[i].getBs());
g2d.fill(ar_leds[i].getShape());
}
ledChanged = false;
}
}
}
private void updateShapes(){
calculatePoints();
createGrid();
createLEDs();
}
/**reagiert auf veraenderung der groesse*/
public void processComponentEvent(ComponentEvent e){
super.processComponentEvent(e);
if((e.getID() & ComponentEvent.COMPONENT_RESIZED) != 0){
this.width = getWidth();
this.height = getHeight();
updateShapes();
}
}
@Override
public void mouseClicked(MouseEvent e) {
int dist = 10;
for(int i = 0; i < (n*n*n); i++){
if(
e.getX() > ar_leds[i].getX()-dist && e.getX() < ar_leds[i].getX()+dist
&&
e.getY() > ar_leds[i].getY()-dist && e.getY() < ar_leds[i].getY()+dist
){
System.out.println("led nr "+i);
toggleLED(ar_leds[i]);
}
}
repaint();
}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
}