Ellipse in weiteren Quadranten zeichnen

aju86

Neues Mitglied
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äß
Java:
if(DragX > KlickX && DragY > KlickY) {
	        		g.drawOval(KlickX, KlickY, (DragX - KlickX), (DragY - KlickY));
hat, wäre das auch ok.


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);
		}
	}
 
S

SlaterB

Gast
kopiere den Code bzw. ersetze deinen, schau an ob es funktioniert
und überlege dann was der Code anders macht als deiner, ob du es dir selbst erklären kannst oder noch fragen musst

Java:
            int x = KlickX; 
            int y = KlickY;
            int eWidth = Math.abs(DragX - x);
            int eHeight = Math.abs(DragY - y);

            if (KlickX > DragX)
            {
                x = DragX;
            }
            if (KlickY > DragY)
            {
                y = DragY;
            }
            g.drawOval(x, y, eWidth, eHeight);
 
S

SlaterB

Gast
nein nein, der war bei dir schon richtig immer positiv,

aber du hast KlickX/Y verändert, der Punkt sollte eigentlich feststehen,
folgte bei dir aber DragX/Y auf Schritt und Tritt, so konnte kein Abstand erzeugt werden
 

Neue Themen


Oben