Dreiecke zeichen

Status
Nicht offen für weitere Antworten.

black

Mitglied
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....


Code:
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();
	}
}
 

Marco13

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

Code:
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

Top Contributor
Code:
/*
* 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]+")  ";
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
N €-Zeichen wird nicht akzeptiert AWT, Swing, JavaFX & SWT 4
_user_q Gibt es eine Möglichkeit, in Java alle möglichen Zeichen automatisch tippen zu lassen? AWT, Swing, JavaFX & SWT 13
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
F AWT awt KeyEvent - Zeichen direkt nach Eingabe löschen AWT, Swing, JavaFX & SWT 2
L Swing Tastatur zeichen AWT, Swing, JavaFX & SWT 4
A 2D-Grafik Zeichen werden über unabhängingen JRadioButton nicht gefüllt AWT, Swing, JavaFX & SWT 28
I JOptionPane maximale Zeichen einstellen AWT, Swing, JavaFX & SWT 2
L JavaFX ASCII Zeichen /char von KeyEvent erhalten AWT, Swing, JavaFX & SWT 5
C Zeichen eines 6 -Eckes AWT, Swing, JavaFX & SWT 1
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
C JavaFX Tiefgestellte Zeichen in fxml AWT, Swing, JavaFX & SWT 2
B EventHandler für durch Tastenkombination erzeugte Zeichen AWT, Swing, JavaFX & SWT 3
L Ausgabe in JEditorPane mittels HTMLEditorKit zeigt auf bestimmten Systemen falsche Zeichen AWT, Swing, JavaFX & SWT 1
S Swing Warum funktioniert der automatische Zeilenumbruch mit arabischen Zeichen beim JTextPane nicht AWT, Swing, JavaFX & SWT 3
A Zeichen-Steuerelement in Swing AWT, Swing, JavaFX & SWT 0
kaoZ Swing Aktives Zeichen für Spieleprogrammierung ? AWT, Swing, JavaFX & SWT 8
D Swing Manuellen Kreis zeichen AWT, Swing, JavaFX & SWT 22
U Label zeigt nicht überall HTML Zeichen AWT, Swing, JavaFX & SWT 3
R einzelne Zeichen in jTable einlesen AWT, Swing, JavaFX & SWT 10
S SWT [TextBox] Bestimmtes Zeichen entfernen unterbinden AWT, Swing, JavaFX & SWT 3
P readLine solange es mit einem bestimmten Zeichen anfängt AWT, Swing, JavaFX & SWT 5
P Komische Zeichen beim Abspeichern von TextFelder AWT, Swing, JavaFX & SWT 2
Jats Zeichen auf mehrere JPanels AWT, Swing, JavaFX & SWT 7
P 2D-Grafik versch. Rectangles aus array von textfelder zeichen AWT, Swing, JavaFX & SWT 6
DEvent Swing JTextField Anzahl an sichtbaren Zeichen AWT, Swing, JavaFX & SWT 4
D JLabel und JPanel -> Neu zeichen?! oO AWT, Swing, JavaFX & SWT 2
E jTextFiled max 160 Zeichen? AWT, Swing, JavaFX & SWT 4
Luk10 Swing Problem mit Zeichen-Thread AWT, Swing, JavaFX & SWT 8
A Rechteck zeichen AWT, Swing, JavaFX & SWT 4
Q AWT Choice ein Zeichen hinzufügen AWT, Swing, JavaFX & SWT 4
J 2D-Grafik Textbasiertes 2D Spiel, jedes Zeichen manipulierbar AWT, Swing, JavaFX & SWT 7
R 2D-Grafik auf JPanel zeichen - ohne @Override paintComponent AWT, Swing, JavaFX & SWT 6
S Thread.sleep() in einer methode fürs zeichen AWT, Swing, JavaFX & SWT 3
T Zeichen/char in Bild umwandeln und darstellen AWT, Swing, JavaFX & SWT 10
2 Bücher über Zeichen und Baumalgorithmen AWT, Swing, JavaFX & SWT 5
T Zeichen zählen JTextPane AWT, Swing, JavaFX & SWT 4
F Zeichen per Menuitem funktioniert nicht AWT, Swing, JavaFX & SWT 2
V Nur zulässige Zeichen in JTable-Zellen eintragen können AWT, Swing, JavaFX & SWT 2
P Swing Probleme beim Zeichen AWT, Swing, JavaFX & SWT 6
aze JTextfield nur so breit dass alle zeichen sichtbar sind AWT, Swing, JavaFX & SWT 2
3TageBart Ebenen in Zeichen-Programm implementieren AWT, Swing, JavaFX & SWT 9
P Zeichen abhängig davon, ob sich eine Variable geändert hat AWT, Swing, JavaFX & SWT 2
G Blinkenden Punkt zeichen AWT, Swing, JavaFX & SWT 2
G Viele Fehler beim zeichen AWT, Swing, JavaFX & SWT 5
J JTextPane mit genau 80 Zeichen breite definieren? AWT, Swing, JavaFX & SWT 3
J jTextarea Anzahl Zeichen in einer Zeile begrenzen AWT, Swing, JavaFX & SWT 2
Lazybone CMYK Zeichen AWT, Swing, JavaFX & SWT 12
H Polyline zeichen, aber wie? AWT, Swing, JavaFX & SWT 2
D jTable ausdrucken => € zeichen wird nicht richtig angezei AWT, Swing, JavaFX & SWT 7
H Problem beim zeichen eines TimeSeriesChart mit jfreechart AWT, Swing, JavaFX & SWT 5
K UNICODE ZEICHEN in den SWing-GUIs AWT, Swing, JavaFX & SWT 4
D Zeichen ein Pixel mit Java2D AWT, Swing, JavaFX & SWT 15
C JFormattedTextField - nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 3
F Zeichen von Linien, Rechtecken, zb wie in paint AWT, Swing, JavaFX & SWT 2
B Zeichen werden im JFormattedTextField überschrieben AWT, Swing, JavaFX & SWT 3
C PI-Zeichen im JLabel AWT, Swing, JavaFX & SWT 3
G Zeilenumbruch nach n Zeichen in JTextArea AWT, Swing, JavaFX & SWT 24
U kleiner-Zeichen JEditorPanel (war: JOptionPane) AWT, Swing, JavaFX & SWT 5
T JLayerdPane: wie etwas über eine AWT Komponente zeichen? AWT, Swing, JavaFX & SWT 2
N Tastatur Zeichen einlesen ohne sichtbares Fenster AWT, Swing, JavaFX & SWT 8
D JTextPane: "Nichtdruckbare Zeichen" anzeigen & AWT, Swing, JavaFX & SWT 4
R letztes Zeichen aus textfeld auslesen AWT, Swing, JavaFX & SWT 2
M rendern von zeichen AWT, Swing, JavaFX & SWT 4
R Zeichen-Markierungrahmen AWT, Swing, JavaFX & SWT 5
F Eingabe in JPasswordField auf vier Zeichen beschränken AWT, Swing, JavaFX & SWT 3
M Transparentes gif als extra Klasse auf einen JFrame zeichen AWT, Swing, JavaFX & SWT 17
B ComboBox: nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 5
G Linien in ein Koordinatensystem zeichen AWT, Swing, JavaFX & SWT 7
H funktionen in ein koordinatensystem zeichen AWT, Swing, JavaFX & SWT 5
B Erstes Zeichen in einem String toUpperCase ??? AWT, Swing, JavaFX & SWT 4
bummerland ein zeichen nach einem zeilenumbruch einfügen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben