Hallo,
vielleicht könnt ihr mir bitte helfen.
Ich versuche einen Sinus mit JSwing auf einem Canvas zu zeichnen. Meine GUI ist so, dass ich mir die untere und obere Intervallgrenze hole (-pi bis +pi) und die Punktanzahl die auf dem Canvas dargestellt werden sollen.
Ich habe dazu zwei Klassen. Eine Klasse heißt Punkt die mir den Sinus von -pi und pi berechnent. Die andere heißt Punkte(Koordinaten) die berechnet mir die Pixel in x- und y-Richtung.
In meiner draw-Methode soll er sich die xPix und yPix holen zusammen mit der Höhe und Breite meines Canvas und soll dann mit drawOval() den sinus zeichnen. Aber was zeichnet er nur, einen ovalen Kreis. Ich hoffe ihr könnt mir ein paar Tipps geben, da mir nach 8 Stunden programmieren gestern einfach nur die Ideen ausgegangen sind. Danke
vielleicht könnt ihr mir bitte helfen.
Ich versuche einen Sinus mit JSwing auf einem Canvas zu zeichnen. Meine GUI ist so, dass ich mir die untere und obere Intervallgrenze hole (-pi bis +pi) und die Punktanzahl die auf dem Canvas dargestellt werden sollen.
Ich habe dazu zwei Klassen. Eine Klasse heißt Punkt die mir den Sinus von -pi und pi berechnent. Die andere heißt Punkte(Koordinaten) die berechnet mir die Pixel in x- und y-Richtung.
In meiner draw-Methode soll er sich die xPix und yPix holen zusammen mit der Höhe und Breite meines Canvas und soll dann mit drawOval() den sinus zeichnen. Aber was zeichnet er nur, einen ovalen Kreis. Ich hoffe ihr könnt mir ein paar Tipps geben, da mir nach 8 Stunden programmieren gestern einfach nur die Ideen ausgegangen sind. Danke
Java:
import java.lang.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
public class Ruf{
public static void main(String[] args){
MyFrame e = new MyFrame();
e.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//e.pack();
e.setVisible(true);
}
}
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.io.*;
import java.awt.Graphics;
class MyFrame extends JFrame implements ActionListener {
//GUI-Komponenten
JTextField input1;
JTextField input2;
JTextField input3;
JButton b;
Canvas can;
Punkte f = new Punkte();
int width = 800;
int height = 430;
public MyFrame(){
//Frame anzeigen lassen mit Titel und eingegebener Größe
setSize(800,500);
setLocationByPlatform(true);
setTitle("GUI für Punkt - XY-Darstellung");
Container cp = getContentPane();
//Layout festlegen
cp.setLayout(new FlowLayout());
//Canvas zum Zeichnen
can = new Canvas();
can.setPreferredSize(new java.awt.Dimension(width,height));
can.setBackground(Color.yellow);
cp.add(can);
//Textields adden
//erstes Textfield:
JLabel label1 = new JLabel("untere Intervallgrenze:");
cp.add(label1);
input1 = new JTextField(10);
cp.add(input1);
//zweites Textfield:
JLabel label2 = new JLabel("obere Intervallgrenze:");
cp.add(label2);
input2 = new JTextField(10);
cp.add(input2);
//drittes Textfield:
JLabel label3 = new JLabel("Punktzahl");
cp.add(label3);
input3 = new JTextField(10);
cp.add(input3);
//Button erstellen
b = new JButton("Berechne");
b.setSize(100,100);
cp.add(b);
//ActionListener
b.addActionListener(this);
//System.out.println(""+label3.getWidth() + "\t"+label3.getHeight());
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == b){
//Eingabe von Textfeldern holen
String in1 = input1.getText();
String in2 = input2.getText();
String in3 = input3.getText();
//Strings in double Werte umwandeln
double xunten = Double.parseDouble(input1.getText());
double xoben = Double.parseDouble(input2.getText());
int pktzahl = Integer.parseInt(input3.getText());
//Schrittweite berechnen
double dist = xoben - xunten;
double weite = dist/(pktzahl - 1);
//System.out.println("\n\nWeite: "+weite);
points(xunten,weite,pktzahl);
}
}
public void points(double xun,double wei, int pkte){
//X-Y Werte in Vector kopieren
for(double i = 0;i<pkte;i++){
f.add(new Punkt(xun+wei*i));
//f.lastElement().setY(Math.sin(xun+wei*i));
//System.out.println(""+f.size());
}
f.calcMinMax();
f.calcPixel(width,height);
paint(can.getGraphics());
}
public void paint(Graphics g){
super.paint(g);
g.clearRect(0,0,width,height);
draw(g);
}
public void draw(Graphics g){
g.setColor(Color.magenta);
for(int i=0; i<f.size();i++){
g.drawOval((int)f.elementAt(i).getxPix(),(int)f.elementAt(i).getyPix(),width,height);
//System.out.println(""+i);
}
}
}
Java:
import java.util.Vector;
import java.lang.*;
import java.io.*;
import java.awt.*;
public class Punkte extends Vector <Punkt> {
double xMin;
double xMax;
double yMin;
double yMax;
public void calcMinMax(){
xMin = this.elementAt(0).getX(); //einfach verkettete Liste
xMax = this.elementAt(0).getX();
yMin = this.elementAt(0).getY();
yMax = this.elementAt(0).getY();
for(int i=1; i<this.size();i++){
if(xMin > this.elementAt(i).getX()){
xMin = this.elementAt(i).getX();
}
if(xMax < this.elementAt(i).getX()){
xMax = this.elementAt(i).getX();
}
if(yMin > this.elementAt(i).getY()){
yMin = this.elementAt(i).getY();
}
if(yMax < this.elementAt(i).getY()){
yMax = this.elementAt(i).getY();
}
}
//System.out.println("\n");
//System.out.println("<xMin: "+xMin +" | " + ""+yMin +" :yMin>");
//System.out.println("<xMax: "+xMax +" | " + ""+yMax +" :yMax>");
}
public void calcPixel(int width, int height){
double b; //Breite
double xPix;
double yPix;
double xSchritt; //Schritttweite: Einheit: Pixel/LE
double ySchritt; //Schritttweite: Einheit: Pixel/LE
double tmp;
b = xMax - xMin;
xSchritt = (width-1)/b;
double h;
h = yMax - yMin;
ySchritt = (height-1)/h;
//System.out.println("\nPixelkoordinaten:\n");
//int j=1;
for(int i = 0;i<this.size();i++){
xPix = xSchritt*(this.elementAt(i).getX() - xMin);
tmp = ySchritt*(this.elementAt(i).getY() - yMin);
yPix = height-1;
yPix -= tmp;
//System.out.printf("fuer den %d.x-Wert: ",j);
//System.out.println("<xPix: "+xPix +" | " + ""+yPix + " :yPix>");
//j++;
}
}
}
Java:
public class Punkt {
private double x=0;
private double y=0;
private double xPix=0;
private double yPix=0;
public Punkt(double zahl){ //Konstruktor (Name = der Klasse)
setX(zahl);
setY(Math.sin(zahl));
}
public void setX(double x){
this.x = x;
}
public void setY(double y){
this.y = y;
}
public double getX(){
return x;
}
public double getY(){
return y;
}
public void setxPix(double xPix){
this.xPix = xPix;
}
public void setyPix(double yPix){
this.yPix = yPix;
}
public double getxPix(){
return xPix;
}
public double getyPix(){
return yPix;
}
}