Graphische Objekte erzeugen |
22.09.2016, 17:50 | Auf diesen Beitrag antworten » | ||||||||||
Marina17 | Graphische Objekte erzeugen Meine Frage: Hallo, Ich möchte mit bluej Java eine Simulation eines Pendels programmieren. Ich bin schon so weit, dass mir immer automatisch die Werte ausgerechnet werden. Jetzt fehlt mir nur noch die Graphische Umsetzung. Wie kann ich mir Linien und Kreise zeichnen lassen? Meine Ideen: Ich glaube ich brauche die Klasse Graphics aber entweder kriege ich dann immer eine null pointer exception oder ich brauche noch eine Variable. |
||||||||||
|
|||||||||||
22.09.2016, 17:53 | Auf diesen Beitrag antworten » | ||||||||||
eulerscheZahl | Dann lass doch mal sehen, was du bisher schon hast. null pointer klingt, als hättest du die Variable nicht initialisiert. |
||||||||||
22.09.2016, 17:59 | Auf diesen Beitrag antworten » | ||||||||||
Marina17 | import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.*; import javax.swing.JFrame; import javax.swing.*; public class GUI extends JFrame { private JFrame Fenster; Graphics g; public GUI() { Fenster = new JFrame("Fenster"); Fenster.setSize(1000,1000); Fenster.setLocation(20,20); Fenster.setVisible(true); } void Zeichnen() { g.drawLine(20,20,200,200); } } |
||||||||||
22.09.2016, 18:12 | Auf diesen Beitrag antworten » | ||||||||||
eulerscheZahl | public class GUI extends JFrame - hier hast du schon mit this ein JFrame. Du brauchst im Konstruktor also kein neues erstellen. Nimm die Methode paint(Graphics g), die wird vom System aufgerufen (auch, wenn das Fenster minimiert wurde, muss bei wieder öffnen neu gezeichnet werden).
|
||||||||||
Anzeige | |||||||||||
|
|||||||||||
22.09.2016, 18:54 | Auf diesen Beitrag antworten » | ||||||||||
Marina17 | Hallo, danke für die Hilfe? Bei mir zeichnet es die Linie sofort kann die Linie auch erst gezeichnet werden, wenn ich die Methode aufrufe? |
||||||||||
23.09.2016, 07:53 | Auf diesen Beitrag antworten » | ||||||||||
eulerscheZahl | Der button zeichnet jetzt 2 Linien: Die erste wird direkt gezeichnet. Diese wird wieder verschwinden, wenn neu gezeichnet werden muss. Für die zweite wird eine Variable gesetzt, die angibt, dass gezeichnet werden soll und dann paint() aufgerufen. Die Linie bleibt erhalten.
|
||||||||||
24.09.2016, 18:36 | Auf diesen Beitrag antworten » | ||||||||||
Marina17 | Hallo, was soll ich dann für die Variable g einsetzen? und geht das auch ohne Button ich habe es bereits so weit, dass es mir immer die x und die y Werte jede zehntel sekunde neu berechnet. |
||||||||||
24.09.2016, 18:52 | Auf diesen Beitrag antworten » | ||||||||||
Marina17 | Hallo, jetzt habe ich es geschafft, dass ich eine Methode Zeichnen hab, die auf Aufruf funktioniert. Wie kann ich die Methode in eine andere Klasse einbinden? |
||||||||||
24.09.2016, 18:54 | Auf diesen Beitrag antworten » | ||||||||||
eulerscheZahl | Ja. Mache die Methode public und rufe sie dann von der anderen Klasse aus auf. |
||||||||||
24.09.2016, 21:00 | Auf diesen Beitrag antworten » | ||||||||||
Marina17 | Hallo, ich habe versucht die Methode von der anderen Klasse aufzurufen, aber immer wenn ich es ausführe haut es mir eine null pointer exception raus. hier ist ein Auszug aus der anderen Klasse: public class PENDEL { private double theta; private double thetaPunkt; private double thetaPunktPunkt; private double m; private double l; private double g; private double omega; private double I; private double tau; private double x; private double y; private int X; private int Y; private int xAlt; private int yAlt; private GUI h; public PENDEL() { // initialise instance variables theta = 0.785; thetaPunkt = 0; thetaPunktPunkt = 0; m = 0.05; l = 0.10; g = 9.81; I = m*l*l; omega = Math.sqrt(m*g*l/I); tau = 0.0001; x = Math.sin(theta)*l; int X = (int)x; xAlt = X; y = Math.cos(theta)*l; int Y = (int)y; yAlt = Y; GUI h = new GUI(); } void Pendelschwingt() { h.Zeichnen(); while(theta != 0.00) { x = (int) xAlt; y = (int) yAlt; theta = thetaPunkt*tau+theta; thetaPunkt = thetaPunktPunkt*tau+thetaPunkt; thetaPunktPunkt = omega*omega*Math.sin(theta); x = Math.sin(theta)*l; System.out.println("x="+x); y = Math.cos(theta)*l; System.out.println("y="+y); x = (int) X; y = (int) Y; } |
||||||||||
24.09.2016, 21:04 | Auf diesen Beitrag antworten » | ||||||||||
Marina17 | Ich habe ganz vergessen die GUI Klasse auch noch mal herzuzeigen. Hier ist die GUI: import java.awt.Color; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class GUI extends JFrame { private boolean shallPaint = false; public static void main(String[] args) { GUI g = new GUI(); } public GUI() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("Fenster"); this.setSize(1000, 1000); this.setLocation(20, 20); this.setLayout(new FlowLayout()); this.setVisible(true); } public void Zeichnen() { shallPaint = true; Graphics g = GUI.this.getGraphics(); GUI.this.paint(g); } public void paint(Graphics g) { if (shallPaint) { g.setColor(Color.black); g.drawLine(500, 500, 600, 600); g.fillOval(495, 495, 10, 10); g.setColor(Color.blue); g.fillOval(595, 595, 10, 10); g.drawLine(0,0,0,0); } } } |
||||||||||
25.09.2016, 07:24 | Auf diesen Beitrag antworten » | ||||||||||
eulerscheZahl | So in etwa?
|
||||||||||
25.09.2016, 18:00 | Auf diesen Beitrag antworten » | ||||||||||
Marina17 | Hallo; warum muss ich wenn ich x1 haben mag x mal 500 nehmen und dann noch plus x0? int x1 = (int) (pendel.getX() * 500 + x0); |
||||||||||
25.09.2016, 18:06 | Auf diesen Beitrag antworten » | ||||||||||
eulerscheZahl | x0: ich wollte das Pendel irgendwie mittig haben und nicht am Rand, dass die Hälfte (negatives x) abgeschnitten ist. Faktor 500: dein Pendel ist sehr kurz. Das würde sich vielleicht ein Pixel hin und herbewegen, wenn ich es nicht hochskalieren würde. |
||||||||||
28.09.2016, 08:45 | Auf diesen Beitrag antworten » | ||||||||||
Marina17 | Hallo, was macht bei der GUI der Timer? und wozu brauche ich ihn? |
||||||||||
28.09.2016, 08:50 | Auf diesen Beitrag antworten » | ||||||||||
eulerscheZahl | Damit wird das Pendel immer neu berechnet und gezeichnet. Sonst würde sich das Bild nicht ändern. |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |