Swing Sinuskurve zeichnen auf Canvas

Status
Nicht offen für weitere Antworten.

KG21

Neues Mitglied
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

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

L-ectron-X

Gesperrter Benutzer
Wenn du mit Swing arbeitest, malst du nicht mehr auf ein Canvas, sondern auf eine JComponent bzw. ein JPanel.
Dort überschreibst du dann die paintComponent()-Methode und füllst sie mit Code zum Malen.
Du zeichnest also auf keinen Fall in den JFrame sondern auf eine darin liegende Component.
 

KG21

Neues Mitglied
ich hab es irgendwie dann auch gemerkt, als der ovale kreis gezeichnet wurde. da wurde hinter dem canvas noch was gezeichnet. es war also ähnlich wie ein panel.

ich kann jetzt aber auch meinen sinus zeichnen lassen. ein studienkollege hat mir nen tipp gegeben. ich musste in der klasse Punkte noch xPix und yPix setzen (in der for-schleife). was dann so aussieht:

Java:
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;
			this.elementAt(i).setxPix(xPix);
			this.elementAt(i).setyPix(yPix);	
		}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E 2D-Grafik Div. Punkte zur Sinuskurve verbinden AWT, Swing, JavaFX & SWT 25
Q Problem bei Sinuskurve! AWT, Swing, JavaFX & SWT 5
S sinuskurve hilfe! AWT, Swing, JavaFX & SWT 2
M Mandelbrot mit BigDecimal erstellen und in der UI zeichnen, funktionierte nicht. AWT, Swing, JavaFX & SWT 1
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
S Event Handling Neu zeichnen nur wenn Berechnung fertig ist AWT, Swing, JavaFX & SWT 4
W JavaFX Ich kann keinen Kreis richtig zeichnen AWT, Swing, JavaFX & SWT 8
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
G Dreieck aus Pixeln zeichnen AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
Z Swing Graph zeichnen lassen AWT, Swing, JavaFX & SWT 16
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
L Swing zeichnen AWT, Swing, JavaFX & SWT 14
S GUI Kreuz zeichnen und Position ausgeben AWT, Swing, JavaFX & SWT 3
S GUI Kreis zeichnen AWT, Swing, JavaFX & SWT 13
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
L Swing Ein Rechteck in ein Grid Zeichnen AWT, Swing, JavaFX & SWT 5
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
E Transparent zeichnen AWT, Swing, JavaFX & SWT 2
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T Tic Tac Toe - GUI Linien zeichnen AWT, Swing, JavaFX & SWT 14
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
Soloeco Graph zeichnen AWT, Swing, JavaFX & SWT 1
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
D Quadrat, Rechteck zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
A Swing JRadioButton zeichnen nicht AWT, Swing, JavaFX & SWT 4
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
S Parallele Linien zeichnen AWT, Swing, JavaFX & SWT 5
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
L JavaFX JavafX Timelime zeichnen und schön stylen? AWT, Swing, JavaFX & SWT 2
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
I Spielsteine zeichnen und entfernen AWT, Swing, JavaFX & SWT 3
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
H Swing BufferedImage zeichnen AWT, Swing, JavaFX & SWT 1
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
S 2D-Grafik MouseDragged Linien zeichnen AWT, Swing, JavaFX & SWT 4
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
I Text zur Linie zeichnen AWT, Swing, JavaFX & SWT 1
I Pfeil zeichnen am Ende einer Linie AWT, Swing, JavaFX & SWT 1
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
F Zeichnen des Button AWT, Swing, JavaFX & SWT 4
B Zeichnen mit paintComponent? Oder anders? AWT, Swing, JavaFX & SWT 15
C Swing Aus verschiedenen Klassen zeichnen. AWT, Swing, JavaFX & SWT 2
C Swing BufferedImage zeichnen und JLabels setzen. AWT, Swing, JavaFX & SWT 17
M Kein Zeichnen der Figuren auf JPanel AWT, Swing, JavaFX & SWT 4
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S Quadrat auf Frame zeichnen AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
G Zeichnen auf eine schwergewichtige Komponente? AWT, Swing, JavaFX & SWT 0
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
P SWT Nebula Gallery - Bildbereiche zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Zeichnen einer sich bewegenden Box mit BufferStrategy zieht Spur AWT, Swing, JavaFX & SWT 2
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
Helgon Swing Mit Swing zeichnen / NetBeans GUI AWT, Swing, JavaFX & SWT 11
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
J JApplet und Zeichnen AWT, Swing, JavaFX & SWT 8
P 2D-Grafik NPE beim Zeichnen auf Graphics g AWT, Swing, JavaFX & SWT 8
4 Swing Graphen selber zeichnen AWT, Swing, JavaFX & SWT 2
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
T Zeichnen von getSubimage funktioniert nicht AWT, Swing, JavaFX & SWT 7
M Bilder zeichnen, NullPointer Exception AWT, Swing, JavaFX & SWT 3
N JPanel neu zeichnen AWT, Swing, JavaFX & SWT 10
D Zeichnen eines Barplots AWT, Swing, JavaFX & SWT 2
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
M Suche Javabibliothek zum Zeichnen mathematischer Funktionen AWT, Swing, JavaFX & SWT 11
M Swing Warum öffnen sich beim Zeichnen mit Swing plötzlich zwei Fenster? AWT, Swing, JavaFX & SWT 5
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
M Swing In GUI-Builder-JFrame mit Menü Schreiben und Zeichnen AWT, Swing, JavaFX & SWT 4
N 2D-Grafik 2 Probleme beim zeichnen AWT, Swing, JavaFX & SWT 18
S Swing Bild auf jPanel nach Änderung von JComboBox zeichnen AWT, Swing, JavaFX & SWT 4
C Funktionen zeichnen AWT, Swing, JavaFX & SWT 16
P JPanel neu zeichnen AWT, Swing, JavaFX & SWT 10
M Auf einem Hintergrundbild zeichnen AWT, Swing, JavaFX & SWT 2
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
T Oval auf ein JPanel zeichnen AWT, Swing, JavaFX & SWT 3
L Zeichnen in zwei Fenstern AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben