Hallo! Ich habe ein Problem und zwar habe ich einen Quelltext aus dem Internet genommen, mit dem man durch Drücken der Maus Punkte zeichnen kann. Ich wollte nun, dass sich diese Punkte verbinden, also das sich P1 mit P2 und P2 mit P3 und so weiter verbindet. Ich habe nun das Problem, das bei der Ausgabe der Punkte immer ein Punkt mehr ausgegeben wird als vorhanden. Also zum Beispiel anstatt 3 Punkten werden 4 Ausgegeben. Auch ist die Verbindungslinie immer mit den linken oberen Rand verbunden.
Ich hoffe ihr versteht was ich meine und könnt mir helfen, achja: ich bin noch ein ziemlicher Anfänger.
Liebe Grüße,
hanfgaertner
PS:Hier noch der Quelltext
Ich hoffe ihr versteht was ich meine und könnt mir helfen, achja: ich bin noch ein ziemlicher Anfänger.
Liebe Grüße,
hanfgaertner
PS:Hier noch der Quelltext
Java:
import java.awt.Graphics;
import java.awt.Color;
import java.awt.event.*;
//Classe Punkte aus einem Frame implementiert MouseListener und MouseMotionListener
public class Punkte extends java.awt.Frame
implements MouseListener, MouseMotionListener {
/**
* Irgendne ID die das Programm haben wollte :D
*/
private static final long serialVersionUID = 6765239455127826451L;;
//Variable punkte und zaehler wird erzeugt.
static int punkte[][] = new int[500][2];
static int zaehler = 0;
public Punkte() {
//MouseListener,MouseMotionListener werden erzeugt
//Frame bekommt den Titel "QuickHull"
super("QuickHull");
addMouseListener(this);
addMouseMotionListener(this);
}
//Was passiert wenn man die Maus drückt
public void mousePressed (MouseEvent me) {
if (zaehler < 500) {
//Koordinaten in der Variable punkte speichern, zaehler um 1 erhöhen, neu zeichnen
punkte[zaehler][0] = me.getX();
punkte[zaehler][1] = me.getY();
zaehler++;
repaint();
}else{
//Ansonsten Anzeigen das die Maximalpunktezahl erreicht ist.
System.out.println(zaehler+" Punkte sind das Maximum!");
}
}
public void mouseDragged(MouseEvent me) {
}
public void mouseMoved(MouseEvent me) {
}
public void mouseClicked(MouseEvent me) {
}
public void mouseEntered(MouseEvent me) {
}
public void mouseExited(MouseEvent me) {
}
public void mouseReleased(MouseEvent me) {
}
//Methode zum zeichnen der Punkte
public void paint(Graphics bs) {
if (zaehler <=500) {
bs.setColor(Color.white);
bs.fillRect(10,30,280,250);
bs.setColor(Color.blue);
for (int i = 0; i<zaehler; i++) {
bs.fillOval(punkte[i][0]-5, punkte[i][1]-5,10,10);
}
bs.setColor(Color.red);
bs.drawString(zaehler + " Punkte gesetzt", 20, 40);
}
//Zeichnen der Linie zwischen den Punkten
if(zaehler>=2){
int durchlauf=0;
for (int i=0;i<=zaehler ;i++ ) {
int x1=sucheX1(durchlauf);
int y1=sucheY1(durchlauf);
System.out.println("Punkt "+durchlauf+":("+x1+"/"+y1+")!");
durchlauf++;
int x2=sucheX1(durchlauf);
int y2=sucheY1(durchlauf);
System.out.println("Punkt "+durchlauf+":("+x2+"/"+y2+")!");
bs.setColor(Color.green);
bs.drawLine(x1,y1,x2,y2);
}
}
}
//Main Methode
public static void main (String [] args) {
Punkte proggi = new Punkte();
WindowListener wl = new WindowAdapter () {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
};
proggi.addWindowListener(wl);
proggi.setSize(300,300);
proggi.setLocation(100,100);
proggi.setVisible(true);
}
//Methode um den Wert der Variable punkte auszulesen
public static int gibPunkte(int q , int w ) {
return(punkte[q][w]);
}
//Methode um die X-Koordinate eines Punktes auszulesen
public int sucheX1(int i){
int x1=0;
x1 = Punkte.gibPunkte(i,0);
return (x1);
}
//Methode um die Y-Koordinate eines Punktes auszulesen
public int sucheY1(int i){
int y1=0;
y1 = Punkte.gibPunkte(i,1);
return (y1);
}
}
Zuletzt bearbeitet: