Hallo ihr Lieben,
bin heute auf euer Forum gestoßen und hab auch schon die Suchfunktion benutzt, jedoch kam ich leider zu keiner Lösung.
Und zwar folgendes Problem:
Ein Freund und ich müssen für unserer Abiturprüfung ein Java-Programm schreiben, was mathematische Funktionen zeichnet. Das zeichnen haben wir schon alles hinbekommen, nur müssen wir die Funktion z.Z. noch im Quellcode selbst eingeben.
Deshalb wollte ich nach ganz unten ein großes Texteingabefeld und ein Knopf machen, wo man eine Funktion hineinschreiben kann und dann mit Druck auf einen Knopf genau diese Funktion neu gepaintet wird.
Kann mir von euch vielleicht jemand helfen, wie ich unten diese Textzeile dort hinbekomme ?
Ich poste euch mal die GUI.java, wobei es glaub ich eh oben nur irgendwo in den Teil muss, wo auch das mit dem JFrame und so ist, oder ?
Wäre euch bei Hilfe echt sehr sehr dankbar, wie gesagt, haben zwar noch 2 Wochen Zeit, aber soll ja schließlich eine (relativ) gute Note zum Ende rauskommen
Vielen Dank und mit lieben Grüßen
EE
bin heute auf euer Forum gestoßen und hab auch schon die Suchfunktion benutzt, jedoch kam ich leider zu keiner Lösung.
Und zwar folgendes Problem:
Ein Freund und ich müssen für unserer Abiturprüfung ein Java-Programm schreiben, was mathematische Funktionen zeichnet. Das zeichnen haben wir schon alles hinbekommen, nur müssen wir die Funktion z.Z. noch im Quellcode selbst eingeben.
Deshalb wollte ich nach ganz unten ein großes Texteingabefeld und ein Knopf machen, wo man eine Funktion hineinschreiben kann und dann mit Druck auf einen Knopf genau diese Funktion neu gepaintet wird.
Kann mir von euch vielleicht jemand helfen, wie ich unten diese Textzeile dort hinbekomme ?
Ich poste euch mal die GUI.java, wobei es glaub ich eh oben nur irgendwo in den Teil muss, wo auch das mit dem JFrame und so ist, oder ?
Code:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
public class GUI extends JComponent implements ActionListener {
/**
* @param args
*/
private JFrame f;
private Graphics g;
//private int height, width;
private int startheight = 700; // Höhe des Fensters beim Programmstart
private int startwidth = 700; // Breite des Fensters beim Programmstart
private double xFaktor; //Streckungsfaktor in x-Richtung
private double yFaktor; //Streckungsfaktor in y-Richtung
private int zoom=60; //gibt den Vergrößerungsfaktor der gesamten Grafik an (Bisher außer länge Scalenstriche)
private Color gitterfarbe = Color.lightGray; //Gitterfarbe beim Start
private Color koordinatenkreuzfarbe = Color.black; //Farbe des Koordinatenkreuzes beim Start
private Zeichnen Zeichnen = new Zeichnen();
private Color hintergrundfarbe = Color.white; //Hintergrundfarbe, wird aber überschrieben
public static void main(String[] args) {
JFrame f = new JFrame();
f.setTitle("Matheprog");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// damit Prog
// beendet wird
Container contentPane = f.getContentPane();
f.getContentPane().setLayout(new BorderLayout()); // Layout setzen
GUI gui = new GUI(f);
f.add(gui);
// Bildschirmabmessungen holen
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension d = kit.getScreenSize();// Fenster wird mittig plaziert
f.setLocation(d.width / 2 - f.getWidth() / 2, (d.height / 2 - f
.getHeight() / 2));
// Symbol des Fensters festlegen
Image img = kit.getImage("icon2.gif");
f.setIconImage(img);
f.setVisible(true);
}
public GUI(JFrame f) {
f.setSize(startheight, startwidth);
menuezeileErzeugen(f);
addComponentListener( // Zeichnet Fenster neu bei Resize
new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
System.out.println("Repaint");
repaint();
}
});
}
@Override
protected void paintComponent(Graphics g) {
int paintheight = this.getHeight();
int paintwidth = this.getWidth();
//g.clearRect(0, 0, paintwidth, paintheight);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
this.isMaximumSizeSet();
System.out.println("Breite des Malfensters : " + paintwidth);
System.out.println("Höhe des Malfensters : " + paintheight);
xFaktor = Math.ceil (((double) paintwidth / (double) (startwidth)));//Berechnung des x-Faktors mit Rundung auf die 10er Stelle
yFaktor = Math.ceil(((double) paintheight / (double) startheight));//Berechnung des y-Faktors mit Rundung auf die 10er Stelle
System.out.println("Neuer x-Faktor: " + xFaktor);
System.out.println("Neuer y-Faktor: " + yFaktor);
koorinatenkreuz(g2,paintheight,paintwidth);
Zeichnen.graphzeichnen(g2,paintheight,paintwidth,zoom,xFaktor,yFaktor);
}
public void koorinatenkreuz(Graphics2D g2,int height, int width) //Zeichnet bisher das Koordinatenkreuz mit Scala und Raster
{
int i=0;
g2.setColor(gitterfarbe);
while ((i < width/2)&&(i<height/2)) { //Zeichnet Gitter
g2.draw( new Line2D.Double((width/2)-(i*(0.5*zoom * yFaktor)),0,(width/2)-(i*(0.5*zoom * yFaktor)),height));// Linien in y-Richtung -
g2.draw( new Line2D.Double((width/2)+(i*(0.5*zoom * yFaktor)),0,(width/2)+(i*(0.5*zoom * yFaktor)),height));// Linien in y-Richtung +
g2.draw( new Line2D.Double(0,(height/2)-(i*(0.5*zoom * xFaktor)),width,(height/2)-(i*(0.5*zoom * xFaktor))));//Linien in x-Richtung -
g2.draw( new Line2D.Double(0,(height/2)+(i*(0.5*zoom * xFaktor)),width,(height/2)+(i*(0.5*zoom * xFaktor))));//Linien in x-Richtung +
i = i +1;
}
g2.setColor(koordinatenkreuzfarbe); //setzt die Farbe des Koordinatenkreuzen einschließlich Scala
g2.draw( new Line2D.Double(0, height / 2, width, height / 2)); // vertikale Linie zeichnen
g2.draw( new Line2D.Double(width / 2, 0, width / 2, height)); // horizontale Linie zeichnen
i = 0;
while ((i < width/2)&&(i<height/2)) { //Zeichnet Scala auf die Achsen
g2.draw( new Line2D.Double((width/2)+(i*(1*zoom * xFaktor)), (height / 2 + (4 * yFaktor)), (width/2)+(i*(1*zoom * xFaktor)),(height / 2 - (4 * yFaktor))));// Scala der x-Achse
g2.draw( new Line2D.Double((width/2)-(i*(1*zoom * xFaktor)), (height / 2 + (4 * yFaktor)), (width/2)-(i*(1*zoom * xFaktor)),(height / 2 - (4 * yFaktor))));//
g2.draw( new Line2D.Double((width / 2 + (4 * xFaktor)),(height/2)+(i*(1*zoom * yFaktor)),(width / 2 - (4 * xFaktor)),(height/2)+(i*(1*zoom * yFaktor)))); //Scala der y-Achse
g2.draw( new Line2D.Double((width / 2 + (4 * xFaktor)),(height/2)-(i*(1*zoom * yFaktor)),(width / 2 - (4 * xFaktor)),(height/2)-(i*(1*zoom * yFaktor))));//
i = i+1;
}
//Zeichnet Zahlen an die Skala
g2.drawString("0",(int)((width/2)+1*xFaktor),(int) (height / 2 + (15 * xFaktor)));
i = 1;
while ((i < width/2)&&(i<height/2)) { //Zeichnet Scala auf die Achsen
g2.drawString(""+(i),(int)((width/2)+(1+i*(1*zoom * xFaktor))),(int) (height / 2 + (15 * xFaktor))); //Zahlen in x + Richtung
g2.drawString(""+(-i),(int)((width/2)-(1+i*(1*zoom * xFaktor))),(int) (height / 2 + (15 * xFaktor)));//Zahlen in x - Richtung
g2.drawString(""+(-i),(int) (width / 2 + (5 * xFaktor)),(int)((height/2)+(1+i*(1*zoom * xFaktor))));//Zahlen in y - Richtung
g2.drawString(""+(i),(int) (width / 2 + (5 * xFaktor)),(int)((height/2)-(1+i*(1*zoom * xFaktor))));//Zahlen in y + Richtung
i = i + 1;
}
}
private void menuezeileErzeugen(JFrame fenster) {
final int SHORTCUT_MASK =
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
JMenuBar menuezeile = new JMenuBar();
fenster.setJMenuBar(menuezeile);
JMenu dateiMenue = new JMenu("Datei");
menuezeile.add(dateiMenue);
JMenuItem beendenEintrag = new JMenuItem("Beenden");
dateiMenue.add(beendenEintrag);
beendenEintrag.addActionListener(this);
JMenu einstellungenMenue = new JMenu("Einstellungen");
menuezeile.add(einstellungenMenue);
JMenuItem einstellungenEintrag = new JMenuItem("Farbeeinstellungen");
einstellungenMenue.add(einstellungenEintrag);
einstellungenEintrag.addActionListener(this);
JMenuItem zoominEintrag = new JMenuItem("Zoom + ");
zoominEintrag.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, SHORTCUT_MASK));
einstellungenMenue.add(zoominEintrag);
zoominEintrag.addActionListener(this);
JMenuItem zoomoutEintrag = new JMenuItem("Zoom - ");
zoomoutEintrag.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORTCUT_MASK));
einstellungenMenue.add(zoomoutEintrag);
zoomoutEintrag.addActionListener(this);
JMenu hilfeMenue = new JMenu("Hilfe");
menuezeile.add(hilfeMenue);
JMenuItem infoEintrag = new JMenuItem("Info");
hilfeMenue.add(infoEintrag);
infoEintrag.addActionListener(this);
}
public void actionPerformed(ActionEvent event) {
System.out.println("Eintrag:" + event.getActionCommand());
if (event.getActionCommand() == "Beenden")
beenden();
if (event.getActionCommand() == "Info")
zeigeInfo();
if (event.getActionCommand() == "Farbeeinstellungen")
einstellungenoeffnen();
if (event.getActionCommand() == "Zoom + ")
zoomin();
if (event.getActionCommand() == "Zoom - ")
zoomout();
}
private void einstellungenoeffnen() {
JFrame win = new JFrame();
win.setTitle("Farbeeinstellungen");
Container contentPane = win.getContentPane();
win.getContentPane().setLayout(new GridLayout(3,2));
win.setSize(300, 150);
JLabel koordinatenfarbentext = new JLabel("Koordinatenkreuzfarbe: ");
JComboBox koordinatenfarben = new JComboBox();
koordinatenfarben.addItem("Schwarz");
koordinatenfarben.addItem("Magenta");
koordinatenfarben.addItem("Rot");
koordinatenfarben.addItem("Blau");
koordinatenfarben.addItem("Orange");
koordinatenfarben.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
JComboBox selectedChoice = (JComboBox) e.getSource();
if (selectedChoice.getSelectedItem().equals("Schwarz"))
koordinatenkreuzfarbe = Color.black;
if (selectedChoice.getSelectedItem().equals("Magenta"))
koordinatenkreuzfarbe = Color.MAGENTA;
if (selectedChoice.getSelectedItem().equals("Rot"))
koordinatenkreuzfarbe = Color.red;
if (selectedChoice.getSelectedItem().equals("Blau"))
koordinatenkreuzfarbe = Color.blue;
if (selectedChoice.getSelectedItem().equals("Orange"))
koordinatenkreuzfarbe = Color.orange;
repaint();
}
});
JLabel gitterfarbentext = new JLabel("Gitterfarbe: ");
JComboBox gitterfarben = new JComboBox();
gitterfarben.addItem("Hellgrau");
gitterfarben.addItem("Grau");
gitterfarben.addItem("Weiß");
gitterfarben.addItem("Schwarz");
gitterfarben.addItem("Cyan");
gitterfarben.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
JComboBox selectedChoice = (JComboBox) e.getSource();
if (selectedChoice.getSelectedItem().equals("Schwarz"))
gitterfarbe = Color.black;
if (selectedChoice.getSelectedItem().equals("Cyan"))
gitterfarbe = Color.cyan;
if (selectedChoice.getSelectedItem().equals("Grau"))
gitterfarbe = Color.gray;
if (selectedChoice.getSelectedItem().equals("Hellgrau"))
gitterfarbe = Color.lightGray;
if (selectedChoice.getSelectedItem().equals("Weiß"))
gitterfarbe = Color.white;
repaint();
}
});
JLabel graphenfarbentext = new JLabel("Graphenfarbe: ");
JComboBox graphenfarben = new JComboBox();
graphenfarben.addItem("Schwarz");
graphenfarben.addItem("Rot");
graphenfarben.addItem("Grau");
graphenfarben.addItem("Weiß");
graphenfarben.addItem("Cyan");
graphenfarben.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
JComboBox selectedChoice = (JComboBox) e.getSource();
if (selectedChoice.getSelectedItem().equals("Schwarz"))
Zeichnen.setGraphenfarbe(Color.black);
if (selectedChoice.getSelectedItem().equals("Cyan"))
Zeichnen.setGraphenfarbe(Color.cyan);
if (selectedChoice.getSelectedItem().equals("Grau"))
Zeichnen.setGraphenfarbe(Color.gray);
if (selectedChoice.getSelectedItem().equals("Rot"))
Zeichnen.setGraphenfarbe(Color.red);
if (selectedChoice.getSelectedItem().equals("Weiß"))
Zeichnen.setGraphenfarbe(Color.white);
repaint();
}
});
win.add(koordinatenfarbentext);
win.add(koordinatenfarben);
win.add(gitterfarbentext);
win.add(gitterfarben);
win.add(graphenfarbentext);
win.add(graphenfarben);
win.setVisible(true);
}
private void zoomin(){
zoom = zoom+10;
if (zoom>=500)zoom=500;
repaint();
}
private void zoomout(){
zoom = zoom-10;
if (zoom<=10*xFaktor)zoom=10;
repaint();
}
private void beenden() {
System.exit(0);
}
private void zeigeInfo() {
JFrame win = new JFrame();
win.setTitle("Informationen");
Container contentPane = win.getContentPane();
win.getContentPane().setLayout(new BorderLayout());
win.setSize(300, 300);
JLabel infotext = new JLabel(
"Dies ist Philips und Christophers Matheprog");
win.add(infotext, BorderLayout.CENTER);
win.setVisible(true);
}
}
Wäre euch bei Hilfe echt sehr sehr dankbar, wie gesagt, haben zwar noch 2 Wochen Zeit, aber soll ja schließlich eine (relativ) gute Note zum Ende rauskommen
Vielen Dank und mit lieben Grüßen
EE