Upload
kpcmj
View
83
Download
0
Embed Size (px)
DESCRIPTION
How to design a Sinus graph in Java.
Citation preview
package de.bno;
import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Toolkit;
import javax.swing.BorderFactory;import javax.swing.JFrame;import javax.swing.JSlider;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;
public class Sinus {
/** * @param args */public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame disp = new JFrame();disp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension dim =Toolkit.getDefaultToolkit().getScreenSize();
disp.setLocation(0, 0);disp.setSize(dim);disp.setUndecorated(true);
final SinusKurve s = new SinusKurve();disp.add(s);s.setUpdspeed(120);s.setYzoom(250);s.setSchweif(250);s.setXspeed(15);s.setXzoom(25);s.setSchritt(0.6f);s.setDicke(2);s.setFillspace(true);s.setOpaque(true);s.setBackground(Color.DARK_GRAY);s.setForeground(Color.GREEN);
final JSlider upd= new JSlider(1,1000);upd.setValue(120);disp.add(upd,BorderLayout.NORTH);upd.setBorder(BorderFactory.createTitledBorder("UpdateSpeed"));upd.addChangeListener(new ChangeListener(){
@Overridepublic void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stubs.setUpdspeed(upd.getValue());
}});
final JSlider yz= new JSlider(0,500);yz.setValue(250);disp.add(yz,BorderLayout.SOUTH);yz.setBorder(BorderFactory.createTitledBorder("YZoom"));yz.addChangeListener(new ChangeListener(){
@Overridepublic void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stubs.setYzoom(yz.getValue());
}});
final JSlider sch= new JSlider(JSlider.VERTICAL,0,500,250);
disp.add(sch,BorderLayout.WEST);sch.setBorder(BorderFactory.createTitledBorder("Schweif"));sch.addChangeListener(new ChangeListener(){
@Overridepublic void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stubs.setSchweif(sch.getValue());
}});
final JSlider xz= new JSlider(JSlider.VERTICAL,0,500,25);
disp.add(xz,BorderLayout.EAST);xz.setBorder(BorderFactory.createTitledBorder("XZoom"));xz.addChangeListener(new ChangeListener(){
@Overridepublic void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stubs.setXzoom(xz.getValue());
}});
disp.setVisible(true);
s.start();
}
}
package de.bno;
import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;
import javax.swing.JComponent;
public class SinusKurve extends JComponent{
/** * */private static final long serialVersionUID = -1904098452588557276L;
private int xspeed=1;private int updspeed=100;private int yzoom=15;private int xzoom=1;private int schweif=0;private Color c;private int dicke;private float schritt;private boolean fillspace;private boolean verblassen;
public SinusKurve(){xspeed=1;updspeed=100;yzoom=15;xzoom=1;setPosx(getWidth()/2);setC(Color.RED);dicke=0;posxalt=posx;schritt=0.5f;fillspace=true;
verblassen=true;try {
baction();} catch (Exception e1) {
// TODO Auto-generated catch block// e1.printStackTrace();
}
}
private BufferedImage bg;
UT updatet;
public void start(){stop();updatet= new UT();updatet.start();
}public void stop(){
if(updatet!=null){updatet.stop();updatet=null;}}
private void baction(){posxalt=posx;posx+=xspeed;if(posx>getWidth()){
posx=0;}paintimage();repaint();
}
@SuppressWarnings("unused")private int posxalt;private int posx;
Graphics gra=null;
public void update(Graphics g){paint(g);
}
private void paintimage(){Graphics2D gr=null;if(bg==null||bg.getWidth()!=getWidth()||bg.getHeight()!=getHeight()){
bg=new BufferedImage(getWidth(),getHeight(),BufferedImage.TYPE_INT_ARGB);}gr=bg.createGraphics();
if(gr!=null){
if(isOpaque()){gr.setColor(getBackground());}else{
gr.setColor(new Color(0,0,0,0));}gr.fillRect(0, 0, getWidth(), getHeight());
gr.setColor(c);
float altx=posx-schweif;float alty=(float) Math.sin((altx/xzoom))*yzoom;if(altx<0){
altx=getWidth()+altx;}
int dickev=dicke;for(float xz=posx-schweif;xz<=posx;xz+=schritt){
float x=xz;float y=(float) Math.sin((x/xzoom))*yzoom;
if(x<0){x=getWidth()+xz;
}
// if(posx==0){// System.out.println(altx+" "+alty+" "+x+" "+y);// }
if(verblassen){dickev=dicke;
}
if(fillspace){
if(altx<x){// gr.drawLine(Math.round(altx), getHeight()/2+Math.round(alty), Math.round(x), getHeight()/2+Math.round(y));
Line(gr,Math.round(altx), getHeight()/2+Math.round(alty), Math.round(x), getHeight()/2+Math.round(y),dickev);
}else{// gr.drawLine(Math.round(x), getHeight()/2+Math.round(y), Math.round(x), getHeight()/2+Math.round(y));
Line(gr,Math.round(x), getHeight()/2+Math.round(y), Math.round(x),
getHeight()/2+Math.round(y),dickev);
}
}else{// gr.drawLine(Math.round(x), getHeight()/2+Math.round(y), Math.round(x), getHeight()/2+Math.round(y));
Line(gr,Math.round(x), getHeight()/2+Math.round(y), Math.round(x), getHeight()/2+Math.round(y),dickev);
}// System.out.println("x:"+Math.round(x)+" y:"+Math.round(y));
altx=x;alty=y;
}
gr.setColor(Color.BLACK);}gr.finalize();
}
Color bgc=Color.BLACK;
public void setBackground(Color c){bgc=c;
}
public Color getBackground(){return bgc;
}
public Color getForeground(){return getC();
}
public void setForeground(Color c){
setC(c);}
public void repaint(){super.repaint();gra.drawImage(bg, 0, 0, getWidth(), getHeight(), 0,0, bg.getWidth(), bg.getHeight(), this);
}
private void Line(Graphics g,int x1,int y1,int x2,int y2,int dicke){if(dicke<0){
dicke=-1*dicke;}for(int i=-dicke;i<=dicke;i++){g.drawLine(x1, y1+i, x2, y2+i);g.drawLine(x1+i, y1, x2+i, y2);}
}
public void paint(Graphics g){super.paint(g);gra=g;repaint();
}
public int getXspeed() {return xspeed;
}
public void setXspeed(int xspeed) {this.xspeed = xspeed;
}
public int getUpdspeed() {return updspeed;
}
public void setUpdspeed(int updspeed) {this.updspeed = updspeed;
}
public int getYzoom() {return yzoom;
}
public void setYzoom(int yzoom) {this.yzoom = yzoom;
}
public int getXzoom() {return xzoom;
}
public void setXzoom(int xzoom) {this.xzoom = xzoom;
}
/** * @return the schweif */public int getSchweif() {
return schweif;}/** * @param schweif the schweif to set */public void setSchweif(int schweif) {
this.schweif = schweif;}
/** * @return the posx */public int getPosx() {
return posx;}/** * @param posx the posx to set */public void setPosx(int posx) {
this.posx = posx;}
/** * @return the c */public Color getC() {
return c;}/** * @param c the c to set */public void setC(Color c) {
this.c = c;}
/** * @return the dicke */
public int getDicke() {return dicke;
}/** * @param dicke the dicke to set */public void setDicke(int dicke) {
this.dicke = dicke;}
/** * @return the schritt */public float getSchritt() {
return schritt;}/** * @param schritt the schritt to set */public void setSchritt(float schritt) {
this.schritt = schritt;}
/** * @return the fillspace */public boolean isFillspace() {
return fillspace;}/** * @param fillspace the fillspace to set */public void setFillspace(boolean fillspace) {
this.fillspace = fillspace;}
/** * @return the verblassen */public boolean isVerblassen() {
return verblassen;}/** * @param verblassen the verblassen to set */public void setVerblassen(boolean verblassen) {
this.verblassen = verblassen;}
class UT{public UT(){
t= new Thread(new Runnable(){
@Overridepublic void run() {
// TODO Auto-generated method stubwhile(running){
try {baction();
} catch (Exception e1) {// TODO Auto-generated catch block
// e1.printStackTrace();}
try {Thread.sleep(updspeed);
} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();
}}
}});}Thread t;public void start(){
running=true;t.start();
}boolean running=false;public void stop(){
running=false;}
}
}