rendered paste body/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
*
* @author Administrator
*/
public class DrawPanel extends JPanel implements Runnable, MouseListener, MouseMotionListener{
private Thread animator;
private final int DELAY = 50;
boolean play=false;
JLabel Txt = new JLabel("Coordinate");
ArrayList objectList = new ArrayList();
Graphics offBuffer;
Beam beam;
Image offImage;
boolean isDrawing = false;
public DrawPanel(){
super();
setPreferredSize(new Dimension(500,495));
setVisible(true);
setBackground(Color.red);
Txt.setOpaque(true);
add(Txt);
addMouseMotionListener(this);
addMouseListener(this);
setDoubleBuffered(true);
beam = new Beam();
add(beam);
}
public void addComponentInPanel(GameObject pObject)
{
objectList.add(pObject);
}
@Override
public void update(Graphics g){
paint(g);
}
@Override
public void paintComponent(Graphics g){
if(offBuffer== null)
{
offImage = createImage(500,495);
offBuffer = offImage.getGraphics();
}
beam.offBuffer=offBuffer;
beam.setBounds(0, 0, 100, 100);
for(int i = 0;i<objectList.size();i++)
{
GameObject base = (GameObject)objectList.get(i);
if(base.GetType() == GameObject.MirrorType.ConcaveLensType)
{
//ConcaveLens lens = (ConcaveLens)base;
//lens.paintComponent(offBuffer);
}
else if(base.GetType() == GameObject.MirrorType.ConvexLensType)
{
// ConvexLens lens = (ConvexLens)base;
// lens.paintComponent(offBuffer);
}
else if(base.GetType() == GameObject.MirrorType.ConcaveMirrorType)
{
// ConcaveMirror lens = (ConcaveMirror)base;
// lens.paintComponent(offBuffer);
}
else if(base.GetType() == GameObject.MirrorType.ConvexMirrorType)
{
// ConvexMirror lens = (ConvexMirror)base;
// lens.paintComponent(offBuffer);
}
else if(base.GetType() == GameObject.MirrorType.PlainMirrorType)
{
// PlainMirror lens = (PlainMirror)base;
// lens.paintComponent(offBuffer);
}
else if(base.GetType() == GameObject.MirrorType.PrismaType)
{
// Prism lens = (Prism)base;
// lens.paintComponent(offBuffer);
}
else if(base.GetType() == GameObject.MirrorType.AirToWaterType)
{
//TODO
}
else if(base.GetType() == GameObject.MirrorType.WaterToAirType)
{
//TODO
}
}
offBuffer.setColor(Color.black);
Txt.setLocation(15, 480);
int XXX=10;//x coordinate of the point where drawing starts
int YYY=5;//x coordinate of the point where drawing starts
int no=48; // value of no should be at the most frameSize/10
int size=10; //size of each box
setBackground(new Color(40,40,80));
for(int j=0;j<no;j++)
{
offBuffer.drawLine(XXX, YYY+j*size, XXX+470, YYY+j*size);
}
for(int j=0;j<no;j++)
{
offBuffer.drawLine(XXX+j*size, YYY, XXX+j*size, YYY+470);
}
g.drawImage(offImage, 0, 0, this);
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
int asdas=1;
String test = e.getComponent().getName();
asdas =1;
}
@Override
public void mouseReleased(MouseEvent e) {
if(!isDrawing )
return;
if(e.getComponent().getName() == "ConcaveLensButton")
{
ConcaveLens lens = new ConcaveLens();
addComponentInPanel(lens);
lens.setLocation(getMousePosition());
lens.offBuffer = offBuffer;
//lens.img = offImage;
lens.addMouseListener(lens);
lens.setBounds(getMousePosition().x, getMousePosition().y, 100, 100);
this.add(lens);
update(offBuffer);
}
else if(e.getComponent().getName() == "ConvexLensButton")
{
ConvexLens lens = new ConvexLens();
addComponentInPanel(lens);
lens.setLocation(getMousePosition());
lens.offBuffer = offBuffer;
lens.addMouseListener(lens);
lens.setBounds(getMousePosition().x, getMousePosition().y, 100, 100);
this.add(lens);
update(offBuffer);
}
// else if(e.getComponent().getName() == "ConvexLens")
// {
//
// }
else if(e.getComponent().getName() == "MirrorButton")
{
PlainMirror mirror = new PlainMirror();
addComponentInPanel(mirror);
mirror.setLocation(getMousePosition());
mirror.addMouseListener(this);
mirror.offBuffer = offBuffer;
//mirror.addMouseListener(mirror);
mirror.setBounds(getMousePosition().x, getMousePosition().y, 100, 100);
this.add(mirror);
update(offBuffer);
}
else if(e.getComponent().getName() == "ConcaveMirrorButton")
{
ConcaveMirror mirror = new ConcaveMirror();
addComponentInPanel(mirror);
mirror.setLocation(getMousePosition());
mirror.offBuffer = offBuffer;
mirror.addMouseListener(mirror);
mirror.setBounds(getMousePosition().x, getMousePosition().y, 100, 100);
this.add(mirror);
update(offBuffer);
}
else if(e.getComponent().getName() == "ConvexMirrorButton")
{
ConvexMirror mirror = new ConvexMirror();
addComponentInPanel(mirror);
mirror.setLocation(getMousePosition());
mirror.offBuffer = offBuffer;
mirror.addMouseListener(mirror);
mirror.setBounds(getMousePosition().x, getMousePosition().y, 100, 100);
this.add(mirror);
update(offBuffer);
}
else if(e.getComponent().getName() == "PrismButton")
{
}
else if(e.getComponent().getName() == "WaterToAirButton")
{
}
else if(e.getComponent().getName() == "AirToWaterButton")
{
}
repaint();
}
@Override
public void mouseEntered(MouseEvent e) {
if(e.getSource() == this)
isDrawing = true;
}
@Override
public void mouseExited(MouseEvent e) {
isDrawing = false;
}
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
if(e.getX()<10 || e.getX()>470 || e.getY()<5 || e.getY()>470 ||e.getComponent() != this)
Txt.setText(" ");
else
{
Txt.setText("Point("+ (e.getX()-10)+","+ (e.getY()-5)+")");
}
}
@Override
public void run() {
// TODO Auto-generated method stub
long beforeTime, timeDiff, sleep;
play=true;
beforeTime = System.currentTimeMillis();
int sasd=1;
while (play) {
gameLoop();
update(offBuffer);
timeDiff = System.currentTimeMillis() - beforeTime;
sleep = 1 - timeDiff;
if (sleep < 0)
sleep = 2;
try {
animator.sleep(50);
} catch (InterruptedException e) {
System.out.println("interrupted");
}
beforeTime = System.currentTimeMillis();
sasd++;
repaint();
updateUI();
if(!play)
animator.yield();
}
}
public void gameLoop() {
beam.updateBeam();
for(int i = 0;i<objectList.size();i++)
{
GameObject base = (GameObject)objectList.get(i);
if(base.GetType() == GameObject.MirrorType.PlainMirrorType)
{
Rectangle rec= base.getBounds();
if(rec.contains(beam.GetCor()))
{
play=false;
break;
}
}
}
}
public void pause() {
play=false;
animator.yield();
}
void start() {
animator = new Thread(this);
animator.start();
}
}