hey leute..
ich möchte gern ein programm schreiben, das mir einfache mathematische funktionen zeichnet.
hab die GUI und die funktion die generell zeichnet schon implementiert.
nun wollte ich aber noch hinzufügen das man in ein textfeld die funktion eintippt und per buttondruck die
funktion gezeichnet bekommt.
nur weiß ich nicht wie ich mit einer aus dem textfeld ausgelesenen funktion in java rechnen kann und vor allem
ob das überhaupt geht.
hat jemand eine idee....
hier mal der quellcode so far.....
das programm besteht aus zwei klassen.. die eine für die mainmethode, die gui und den action listener und
die andere die zeichnen soll.
bis jetzt sieht man eine direkt im source eingetippte funktion gezeichnet, und die gui mit buttons und textfeldern usw.
danke im vorraus
ich möchte gern ein programm schreiben, das mir einfache mathematische funktionen zeichnet.
hab die GUI und die funktion die generell zeichnet schon implementiert.
nun wollte ich aber noch hinzufügen das man in ein textfeld die funktion eintippt und per buttondruck die
funktion gezeichnet bekommt.
nur weiß ich nicht wie ich mit einer aus dem textfeld ausgelesenen funktion in java rechnen kann und vor allem
ob das überhaupt geht.
hat jemand eine idee....
hier mal der quellcode so far.....
Code:
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.io.*;
import java.awt.event.*;
import java.awt.Toolkit.*;
class MathFunktion extends JFrame implements ActionListener {
//Der ganze Stuff für das Windows-Fenster,
//habe GridBagConstraints zum anordnen benutzt und nen ActionListener
//implementiert
Panel[] p = new Panel[2];
JLabel funktion = new JLabel("Funktion: ");
JTextField funk = new JTextField(100);
JButton zeichnen = new JButton("Zeichnen");
JLabel af = new JLabel();
public MathFunktion() {
super("Mathematische Funktionen");
setSize(800, 800);
GridBagLayout Gridbag = new GridBagLayout();
GridBagConstraints Constraints = new GridBagConstraints();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel();
p.setLayout(Gridbag);
//Hier werden die Constraints definiert
//Zeichenfläche
Constraints.fill = GridBagConstraints.BOTH;
Constraints.anchor = GridBagConstraints.WEST;
ConstraintsErstellen(Constraints, 0, 0, 3, 1, 100, 85);
Darstellung dar = new Darstellung();
Gridbag.setConstraints(dar, Constraints);
p.add(dar);
//Platzhalter
Constraints.fill = GridBagConstraints.BOTH;
Constraints.anchor = GridBagConstraints.CENTER;
ConstraintsErstellen(Constraints, 0, 1, 3, 1, 100, 0);
Gridbag.setConstraints(af, Constraints);
p.add(af);
//Label (Funktion)
Constraints.fill = GridBagConstraints.BOTH;
Constraints.anchor = GridBagConstraints.CENTER;
ConstraintsErstellen(Constraints, 0, 2, 1, 1, 10, 10);
Gridbag.setConstraints(funktion, Constraints);
p.add(funktion);
//Textfeld
Constraints.fill = GridBagConstraints.BOTH;
Constraints.anchor = GridBagConstraints.NORTH;
ConstraintsErstellen(Constraints, 1, 2, 1, 1, 80, 0);
Gridbag.setConstraints(funk, Constraints);
p.add(funk);
//Button Zeichnen
Constraints.fill = GridBagConstraints.BOTH;
Constraints.anchor = GridBagConstraints.NORTH;
ConstraintsErstellen(Constraints, 2, 2, 1, 1, 10, 0);
zeichnen.addActionListener(this);
Gridbag.setConstraints(zeichnen, Constraints);
p.add(zeichnen);
add(p);
setVisible(true);
}
//Hilfsklasse für die Constraints
public void ConstraintsErstellen(GridBagConstraints gbc, int gx,
int gy, int gw, int gh, int wx, int wy) {
gbc.gridx = gx;
gbc.gridy = gy;
gbc.gridwidth = gw;
gbc.gridheight = gh;
gbc.weightx = wx;
gbc.weighty = wy;
}
//Main
public static void main (String args[]) {
MathFunktion math = new MathFunktion();
}
//Die ActionPerformed Methode für den Zeichnen Button
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if (source == zeichnen) {
//Hier soll er nun die Zeichenkette auslesen und sie in die
//Darstellungsklasse übergeben
repaint();
}
}
}
class Darstellung extends JPanel {
public int y;
float y1;
//Methode um die Funktion zu zeichnen
public void paintComponent(Graphics comp) {
Graphics2D comp2D = (Graphics2D)comp;
comp2D.setColor(Color.gray);
setSize(800, 600);
Rectangle2D.Float background = new Rectangle2D.Float(
0F, 0F, (float)getSize().width, (float)getSize().height);
comp2D.fill(background);
comp2D.setColor(Color.black);
//X-und Y-Achse
comp2D.drawLine(400,0,400,600);
comp2D.drawLine(0,300,800,300);
//Farbe für die Funktion
comp2D.setColor(Color.blue);
//BLOCK DER BIS ZUM X-WERT NULL ZEICHNET-------------------------------------------
int [] pArray1 = new int[4];
boolean erster1 = true;
for (int x=0; x>= -400; x--) {
int y;
float y1;
//HIER MUSS DIE FUNKTION EINGETRAGEN WERDEN----
y1 = x*x; //Da steht bis jetzt halt eine feste Funktion
//---------------------------------------------
y = (int) y1;
if (erster1 == true) {
pArray1[0] =x;
pArray1[1] =y;
comp2D.drawLine(pArray1[0]+400, -(pArray1[1])+300, pArray1[0]+400, -(pArray1[1])+300);
erster1 = false;
}
else
pArray1[2] =x;
pArray1[3] =y;
comp2D.drawLine(pArray1[0]+400, -(pArray1[1])+300, pArray1[2]+400, -(pArray1[3])+300);
pArray1[0] = pArray1[2];
pArray1[1] = pArray1[3];
}
//BLOCK DER BIS ZUM X-WERT NULL ZEICHNET-------------------------------------------
//BLOCK DER AB DEM X-WERT NULL ZEICHNET-------------------------------------------
int x1;
int [] pArray = new int[4];
boolean erster = true;
for (x1=0; x1<= 400; x1++) {
//HIER MUSS DIE FUNKTION EINGETRAGEN WERDEN----
y1 = x1*x1; //Hier dasselbe wie beim vorherigen Block
//---------------------------------------------
y = (int) y1;
if (erster == true) {
pArray[0] =x1;
pArray[1] =y;
comp2D.drawLine(pArray[0]+400, -(pArray[1])+300, pArray[0]+400, -(pArray[1])+300);
erster = false;
}
else
pArray[2] =x1;
pArray[3] =y;
comp2D.drawLine(pArray[0]+400, -(pArray[1])+300, pArray[2]+400, -(pArray[3])+300);
pArray[0] = pArray[2];
pArray[1] = pArray[3];
}
//BLOCK DER AB DEM X-WERT NULL ZEICHNET-------------------------------------------
}
}
das programm besteht aus zwei klassen.. die eine für die mainmethode, die gui und den action listener und
die andere die zeichnen soll.
bis jetzt sieht man eine direkt im source eingetippte funktion gezeichnet, und die gui mit buttons und textfeldern usw.
danke im vorraus