# Dreiecke zeichen



## black (19. Mai 2007)

hi, versuche ein programm zu schreiben, welches mir durch klicken in ein Fenster dreiecke zeichnet.
Also ich klicke 3mal beliebig in ein Fenster und dann zeichnet er mit durch die 3 gegebenen Punkte ein Dreieck. weiterhin möchte ich dann weitere dreiecke so zeichnen und später soll er mir das mit dem größten flächeninhalt farbig markieren.

hab schonmal nen code den ich anhänge..

mein problem ist es unter graphics gibts die drawPolygon Methode welche int[] verlangt. ich aber durch den mausklick int erhalte und die nicht in das array int[]xPoints bzw int[]yPoint renschreiben kann...

siehe public void mousePressed(MouseEvent e)... möchte die drei mausklicks in der forschleife abfangen und nach 3 klicken wieder leeren. dann kommen ja wieder 3 neue klicks für das neue dreieck... usw....



```
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Iterator;
import java.util.Vector;


public class zeichenprog extends Frame implements MouseListener{
	
	int height = 600;
	int width = 600;
	 
	
	
	
	public zeichenprog() {
		setSize(width, height);
		setVisible(true);

		addMouseListener(this);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;


	private Vector elements = new Vector();
	

	private interface Primitiv {
		void paint(Graphics g);
	}
	
	private class Point implements Primitiv {
		private double x,y;
		int width=1, height=1;
		
		public Point(int x, int y) {
		
		this.x = x;
		this.y = y;
		}
	
		public void paint(Graphics g) {
			g.setColor(Color.cyan);
			g.drawOval((int) x, (int)y, width, height);
		}}
	
	public void point(int x, int y) {
		elements.add(new Point(x, y));
	}
	
	private class Dreieck implements Primitiv 
	{
			
		
		private int[] XWerte = new int[3];
		private int[] YWerte = new int[3];
		int nPoints = 3;
		
			
		
		public Dreieck(int [] XWerte, int[] YWerte)
		{
			this.XWerte= XWerte;
			this.YWerte= YWerte;
		}
		
		public void paint(Graphics g) 
		{
			g.setColor(Color.red);
			g.drawPolygon(XWerte, YWerte, nPoints);
		}}
		
		public void dreieck(int []XWerte, int[] YWerte) 
		{
		elements.add(new Dreieck(  XWerte, YWerte ));
		}
        
	
	
	public void allesNeu() {
		repaint();
	}

	public void paint(Graphics g) {
		for (Iterator iter = elements.iterator(); iter.hasNext();){
			((Primitiv) iter.next()).paint(g);
		}
			
	}

	public void mouseClicked(MouseEvent e) {
		
		// TODO Auto-generated method stub
		
	}

	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		if (e.getButton() == MouseEvent.BUTTON3)
			point(e.getX(), e.getY());
		if (e.getButton() == MouseEvent.BUTTON1)
			point(e.getX(), e.getY());
			
			for (int i = 0;i<3; i++){
		    
		    dreieck(e.getX(),e.getY());
			}
			
		allesNeu();
	}
		
	

	



	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	
	public static void main(String[] args) {		
		zeichenprog zeichne = new zeichenprog();
	}
}
```


----------



## Wildcard (19. Mai 2007)

Ich würde dir dazu raten Graphics2D und Polygone zu verwenden.
Das hier geht in die Richtung:
http://www.java-forum.org/de/topic46550_zeichnen-swing-tutorial.html


----------



## Marco13 (19. Mai 2007)

Ein bißchen Pesudocode - in der Hoffnung, das richtig verstanden zu haben :roll: 


```
class XXX
{
    Point points[] = new Point[3];
    int pointCounter = 0;

    ArrayList<Dreieck> triangles = ...


    public void mouseClicked(MouseEvent e)
    {
        // Speichere alle Klick-Positionen (maximal 3 Stück)
        points[pointCounter] = new Point(e.getX(), e.getY());
        pointCounter++;

        if (pointCounter == 3) // Neues Dreieck fertig!
        {
            Dreieck dreieck = new Dreieck(points[0], points[1], points[2]);
            triangles.add(dreieck);
            pointCounter = 0;
        }
    }
}
```


----------



## André Uhres (19. Mai 2007)

```
/*
* Zeichenprog.java
*/
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Point2D;
import java.util.*;
public class Zeichenprog extends Frame implements MouseListener{
    private int height = 600;
    private int width = 600;
    private int nbrPoints;
    public Zeichenprog() {
        setSize(width, height);
        addMouseListener(this);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    private static final long serialVersionUID = 1L;
    private Vector<Primitiv> elements = new Vector<Primitiv>();
    public void point(int x, int y) {
        elements.add(new Point(x, y));
    }
    public void dreieck(int[] XWerte, int[] YWerte) {
        elements.add(new Dreieck(  XWerte, YWerte ));
    }
    public void allesNeu() {
        double biggestArea = 0;
        int index = -1;
        int i = 0;
        for(Primitiv p : elements){
            if(p instanceof Dreieck){
                Dreieck d = (Dreieck)p;
                d.setColor(Color.RED);
                double area = d.getArea();
                if(biggestArea < area) {
                    biggestArea = area;
                    index = i;
                }
            }
            i++;
        }
        if(index > -1){
            Dreieck d = (Dreieck) elements.get(index);
            d.setColor(Color.BLUE);
        }
        repaint();
    }
    public void paint(Graphics g) {
        System.out.println(elements);
        for(Primitiv p : elements) p.paint(g);
    }
    public void mouseClicked(MouseEvent e) {}
    public void mousePressed(MouseEvent e) {
        point(e.getX(), e.getY());
        nbrPoints++;
        if(nbrPoints == 3){
            int[] xA = new int[nbrPoints];
            int[] yA = new int[nbrPoints];
            int j = 0;
            for( int i = elements.size()-nbrPoints; i< elements.size(); i++){
                Point p = (Point)elements.get(i);
                xA[j] = (int) p.x;
                yA[j] = (int) p.y;
                j++;
            }
            dreieck(xA, yA);
            nbrPoints = 0;
        }
        allesNeu();
    }
    public void mouseReleased(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public static void main(String[] args) {
        new Zeichenprog().setVisible(true);
    }
}
/*
* Primitiv
*/
interface Primitiv {
    void paint(Graphics g);
}
/*
* Point
*/
class Point implements Primitiv {
    public double x,y;
    int width=1, height=1;
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
    public void paint(Graphics g) {
        g.setColor(Color.cyan);
        g.drawOval((int) x, (int)y, width, height);
    }
    public String toString(){return "Point ("+x+", "+y+")";}
}
/*
* Dreieck
*/
class Dreieck implements Primitiv {
    private int[] XWerte = new int[3];
    private int[] YWerte = new int[3];
    private double area;
    int nPoints = 3;
    private Color color;
    public Dreieck(int [] XWerte, int[] YWerte) {
        this.XWerte= XWerte;
        this.YWerte= YWerte;
        double a = Point2D.Double.distance(XWerte[0], YWerte[0], XWerte[1], YWerte[1]);
        double b = Point2D.Double.distance(XWerte[1], YWerte[1], XWerte[2], YWerte[2]);
        double c = Point2D.Double.distance(XWerte[2], YWerte[2], XWerte[0], YWerte[0]);
        double s = (a+b+c)/2;
        area = Math.sqrt(s*(s-a)*(s-b)*(s-c));
    }
    public void paint(Graphics g) {
        g.setColor(color);
        g.drawPolygon(XWerte, YWerte, nPoints);
    }
    public double getArea(){
        return area;
    }
    public void setColor(Color color){
        this.color = color;
    }
    public String toString(){
        return "Dreieck " +
                "("+XWerte[0]+", "+YWerte[0]+"), " +
                "("+XWerte[1]+", "+YWerte[1]+"), " +
                "("+XWerte[2]+", "+YWerte[2]+")  ";
    }
}
```


----------

