Hallo Leute.
Ich hoffe ihr könnt mir weiter helfen, denn so langsam verzweifel ich an einer Aufgabe..
Es geht darum eine Ellipse in mehr als im 1. Quadranten (also nicht nur von links oben nach rechts unten) zu zeichnen. Meine bisherigen Versuche blieben leider erfolglos.. (s.u.)
Wäre wirklich klassen wenn jemand von euch meinen Quellcode entsprechend editieren würde.
Falls jemand eine Lösung mit einzelner Quadrantenabfrage, z.B. gemäß
hat, wäre das auch ok.
Anbei mein aktueller Programmcode:
Ich hoffe ihr könnt mir weiter helfen, denn so langsam verzweifel ich an einer Aufgabe..
Es geht darum eine Ellipse in mehr als im 1. Quadranten (also nicht nur von links oben nach rechts unten) zu zeichnen. Meine bisherigen Versuche blieben leider erfolglos.. (s.u.)
Wäre wirklich klassen wenn jemand von euch meinen Quellcode entsprechend editieren würde.
Falls jemand eine Lösung mit einzelner Quadrantenabfrage, z.B. gemäß
Java:
if(DragX > KlickX && DragY > KlickY) {
g.drawOval(KlickX, KlickY, (DragX - KlickX), (DragY - KlickY));
Anbei mein aktueller Programmcode:
Java:
import java.awt.*;
import java.awt.event.*;
public class ProgFenster extends Frame implements ActionListener
{
String color="Leer";
int KlickX, KlickY, DragX, DragY; // Def. Koordinaten
boolean zeichneneinaus=false;
// Konstruktor
public ProgFenster()
{
fensterbehandlung f1;
f1 = new fensterbehandlung();
mouseklickbehandlung m1; //Mouse-Klick definieren
m1 = new mouseklickbehandlung();
mousezeichnenbehandlung mz1; //Mouse-Bewegung/Zeichnung definieren
mz1 = new mousezeichnenbehandlung();
this.addWindowListener(f1); // WindowListener hinzufügen
this.addMouseListener(m1); //Mouselistener hinzufügen
this.addMouseMotionListener(mz1); //MouseMotionListener hinzufügen
//setTitle(name) - setSize(Breite,Länge) ... nicht nötig, da in Frame
// definieren der einzelnen Menüitems
MenuItem mBlau = new MenuItem ("Blau");
MenuItem mGruen = new MenuItem ("Gruen");
MenuItem mRot = new MenuItem ("Rot");
//Figuren
MenuItem kreis = new MenuItem("Kreis");
MenuItem rechteck = new MenuItem("Rechteck");
// Menü Farbe erzeugen und Menüitems implementieren
Menu menueFarbe = new Menu ("Hintergrundfarbe");
Menu zeichnen = new Menu("Zeichnen");
menueFarbe.add(mBlau);
menueFarbe.add(mGruen);
menueFarbe.add(mRot);
zeichnen.add(kreis); //+zeichnen ins Menü anfügen
zeichnen.add(rechteck);
// Menüleiste erzeugen und Menü Farbe implementieren
MenuBar MenuLeiste = new MenuBar();
MenuLeiste.add(menueFarbe);
MenuLeiste.add(zeichnen); //neue Menüleiste "zeichnen"
// MenuLeiste zum Fenster hinzufügen
this.setMenuBar(MenuLeiste);
menueFarbe.addActionListener(this);
zeichnen.addActionListener(this);
// Aufruf von "FENSTER ZU" und hinzufügen, Listener implementieren
FensterZu FZ = new FensterZu();
this.addWindowListener(FZ);
}
//ActionListener f. Darstellung
// Funktion welche die Auswahl des Bedieners registriert
public void actionPerformed(ActionEvent e) //Listener Methode
{
color=e.getActionCommand(); // Listener Eingabe
if(color == "Blau")
{
setBackground(Color.BLUE);
repaint();
KlickX=0;
KlickY=0;
}
else if(color == "Gruen")
{
setBackground(Color.GREEN);
repaint();
KlickX=0;
KlickY=0;
}
else if(color == "Rot")
{
setBackground(Color.RED);
repaint();
KlickX=0;
KlickY=0;
}
}
class fensterbehandlung extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
class mouseklickbehandlung extends MouseAdapter //(M.Adapter enthält MouseListener)
{
public void mouseClicked(MouseEvent e) //Mouse klicken
{
KlickX=e.getX();
KlickY=e.getY();
zeichneneinaus=false;
repaint(); //repaint=neuzeichnen
}
}
class mousezeichnenbehandlung extends MouseMotionAdapter
{
public void mouseDragged(MouseEvent e) //Mouse klicken und bewegen
{
DragX=e.getX();
DragY=e.getY();
zeichneneinaus=true;
repaint();
}
}
public void paint(Graphics g)
{
g.drawString(KlickX+"/"+KlickY,KlickX,KlickY); //Ausgabe Koordinaten in Fenster
if(color.equals("Kreis") && zeichneneinaus == true)
{
int eWidth, eHeight = 0; // zu beginn setzten wir vorsichtshalber alles auf null!
int tempX = KlickX; // Speichere KlickX und KlickY zwischen, für den Fall das wir die Werte überschreiben müssen
int tempY = KlickY;
// nun muss geprüft werden ob KlickX größer ist als DragX, in diesem Fall befindet sich der Cursor zu diesem Zeitpunkt links vom Startpunkt
if( KlickX > DragX)
{
// ist dies der Fall muss X getauscht werden, um weiterhin eine fehlerfreie Ellipse zu zeichnen
KlickX = DragX;
DragX = tempX;
}
// nun muss geprüft werden ob KlickY größer ist als DragY, in diesem Fall befindet sich der Cursor zu diesem Zeitpunkt über dem Startpunkt
if( KlickY > DragY)
{
// ist dies der Fall muss Y getauscht werden, um weiterhin eine fehlerfreie Ellipse zu zeichnen
KlickY = DragY;
DragY = tempY;
}
// nun muss die Breite und die Höhe der Ellipse berechnet werden
eWidth = DragX - KlickX;
eHeight = DragY - KlickY;
// abschließend muss die Ellipse noch gezeichnet werden
g.drawOval(KlickX, KlickY, eWidth, eHeight);
}
// Aufg.: oval muss noch in eine andere richtung gehen!
else if(color.equals("Rechteck") && KlickY>=50 && zeichneneinaus==true) {
g.drawLine(KlickX,KlickY,KlickX,KlickY-(KlickY-DragY)); //Quelle f. Drawline: Netz
g.drawLine(KlickX,KlickY-(KlickY-DragY),DragX,DragY);
g.drawLine(DragX,DragY,DragX,KlickY);
g.drawLine(KlickX, KlickY, DragX, KlickY);
}
}
}
Java:
public class Test
{
public static void main(String[] args)
{
ProgFenster pF = new ProgFenster(); // Aufruf Konstruktor
pF.setTitle("GrafikDesigner"); // Fenster Titel
pF.setSize(500,300); //Fenstergrösse
pF.setVisible(true); //Sichtbarkeit des Fensters
}
}
Java:
import java.awt.event.*;
// Klasse dient nur der Funktion "Fenster schließen"
public class FensterZu extends WindowAdapter
{
// Funktion welche das Schließen des Fensters ermöglicht
public void windowClosing(WindowEvent e) //Listener: "windowClosing(Window..."
{
System.exit (0);
}
}