10
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(){

Sinus in Java

  • Upload
    kpcmj

  • View
    83

  • Download
    0

Embed Size (px)

DESCRIPTION

How to design a Sinus graph in Java.

Citation preview

Page 1: Sinus in Java

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(){

Page 2: Sinus in Java

@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());

}});

Page 3: Sinus in Java

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;

Page 4: Sinus in Java

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();

Page 5: Sinus in Java

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),

Page 6: Sinus in Java

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){

Page 7: Sinus in Java

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;

}

Page 8: Sinus in Java

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 */

Page 9: Sinus in Java

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(){

Page 10: Sinus in Java

@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;}

}

}