Java Anfänger Grafik programmierungs Problem

Hallo

ich hab folgenden code schon mal hinbekomen

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class CFunkPlotter extends JFrame {
CMeineCanvas m_malflaeche;
int aktFunktion = 0;

public static void main(String[] args) {
CFunkPlotter fenster = new CFunkPlotter(„Funktionenplotter“);
fenster.pack();
fenster.setSize(350,400);
fenster.setResizable(false);
fenster.setVisible(true);
}

CFunkPlotter(String titel) {
super(titel);

setLayout(new FlowLayout());

m_malflaeche = new CMeineCanvas();
add(m_malflaeche);

JButton f1 = new JButton(„tan(x)“);
JButton f2 = new JButton(„x^3“);
JButton f3 = new JButton(„sin(x)“);
JButton f4 = new JButton(„cos(x)“);
JButton f5 = new JButton(„cotangens(x)“);

add(f1);
add(f2);
add(f3);
add(f4);
add(f5);

class CMeinActionLauscher implements ActionListener {
public void actionPerformed(ActionEvent e) {
String label;

label = e.getActionCommand();

if(label.equals(„tan(x)“))
aktFunktion = 2;
else if (label.equals(„x^3“))
aktFunktion = 1;
else if (label.equals(„sin(x)“))
aktFunktion = 3;
else if (label.equals(„cos(x)“))
aktFunktion = 4;

m_malflaeche.repaint();
}
}

f1.addActionListener(new CMeinActionLauscher());
f2.addActionListener(new CMeinActionLauscher());
f3.addActionListener(new CMeinActionLauscher());
f4.addActionListener(new CMeinActionLauscher());
f5.addActionListener(new CMeinActionLauscher());

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

class CMeineCanvas extends Canvas {
CMeineCanvas() {
setBackground(Color.black);
setForeground(Color.green);
}

public void paint(Graphics g) {
double x,y;
int xpos,ypos;

g.translate(150,150);
g.setColor(Color.red);
g.drawLine(0,-150,0,150);
g.drawLine(-150,0,150,0);
g.drawString("-3",-150,12);
g.drawString("-3",4,147);
g.drawString("+3",135,12);
g.drawString("+3",4,-140);

g.setColor(new Color(255,255,0));

if(aktFunktion == 0)
return;

for(x= -3.0; x

komm schon Keks ist doch ein Kinderspiel für dich :wink:!

Hallo,

mit pre-Elementen formattierter Quelltext ist deutlich einfacher zu lesen.

if(aktFunktion == 2);{
// …
}

if(aktFunktion == 1);{
}

if(aktFunktion == 3);{
}

if(aktFunktion == 4);{
}

Deine if Abfragen zeigen keine Wirkung, der Strichpunkt führt jeweils dazu, dass der nachfolgende Block unabhängig von der Bedingung ausgeführt wird. Es passiert dadurch unabhängig davon welcher Button betätigt wird immer das selbe.

Gruß
Heavy

Ja. Das habe ich auch schon gemerkt nur warum ?
ich hab doch die if abfragen

Hallo,

ich hab doch die if abfragen

Ja schon. Aber ein Semikolon beendet das Statement. Das was danach kommt wird dann auf jeden Fall ausgeführt. In deinem Fall wird die if-Abfrage gemacht, dann aber mit dem Ergebnis dieser Abfrage nichts gemacht, da danach direkt ein Semikolon kommt.

Probiers mal ohne die Semikolons :wink:

Außerdem würde ich dir empfehlen, statt einer solchen langen Reihe von eigenständigen if-Blöcken if-else if-else Blöcke zu nehmen. Also so:

if (n == 1) {
 //...
} else if (n == 2) {
 //...
} else {
 //...
}

Das macht’s einfach lesbarer und weniger Fehleranfällig.

Jops

Ja aber WELCHE Semilikolons ???

Hallo,

das ist ein Zitat aus deinem Quelltext:

if(aktFunktion == 2);{
//…
}

if(aktFunktion == 1);{
//…
}

if(aktFunktion == 3);{
//…
}

if(aktFunktion == 4);{
//…
}

Und jetzt frag dich nochmal wo da falsche Semikolons sind.

Jops

Okay Dankeschön :wink:

Jetzt gehts ein Teil zumindest, die Funktion x^3, alle anderen buttons gehen nicht. Woran liegt das warum habe ich keine „verbindung“ zwischen den Buttons und den aktionen ?

Hallo,

Jetzt gehts ein Teil zumindest, die Funktion x^3, alle anderen
buttons gehen nicht. Woran liegt das warum habe ich keine
„verbindung“ zwischen den Buttons und den aktionen ?

die Buttons gehen schon, aber nur bei der x^3 Funktion zeichnest du auch wirklich etwas. Bei allen anderen Bedingungen wird nur die Farbe gesetzt, ohne tatsächlich etwas zu zeichnen.

Gruß
Heavy

Vielen Dank HEAVY !!

mein Programm läuf !!! TOP

nur wie bekomme ich jetzt noch ein exit button hin der das gleiche macht wie das X(schließen) oben rechts ?

und wie kann ich 2 Funktionen vergleichen ?

z.b tan und cos ? also das beide gleichzeitig gemalt werden ?

Hi

nur wie bekomme ich jetzt noch ein exit button hin der das
gleiche macht wie das X(schließen) oben rechts ?

Du schreibst einen Button mit ActionListener:
exitButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.exit(0);
}
});

und wie kann ich 2 Funktionen vergleichen ?
z.b tan und cos ? also das beide gleichzeitig gemalt werden ?

Du könntest ein boolean-Array erstellen, dass dir für jede Funktion sagt, ob sie gezeichnet werden soll
boolean [] fktZeichnen = new boolean[4];
Alle 4 Werte sind jetzt ‚false‘

Um sie zu ändern:
if(label.equals(„tan(x)“))
fktZeichnen[2] = !fktZeichnen[2];
else if (label.equals(„x^3“))
fktZeichnen[1] = !fktZeichnen[1];
else if (label.equals(„sin(x)“))
fktZeichnen[3] = !fktZeichnen[3];
else if (label.equals(„cos(x)“))
fktZeichnen[4] = !fktZeichnen[4];

Dann fehlt nur noch das Überprüfen:
statt
if(aktFunktion == 2){
g.setColor(new Color(213,46,0));
y = Math.tan(x);
xpos = (int) (x*100);
ypos = (int) (-y*100);
}
nimmst du jetzt
if(fktZeichnen[2]){
//…
}

So sollte das klappen.

Gruß, Keks