Servus,
ich weiss gerade nicht woran es liegt, ich mache meine kleinen Tests um den Fehler einzukreisen und nun glaube, habe ich ihn.
Ich habe eine Gui-Klasse, die auch das Event-Handlung beinhaltet. Dann habe ich die Klasse JobaDrawPanel, das ist sozusagen, meine Zeichenfläche für die Gui. Nun kann man mit einem Klick ein Kreuz an der Stelle im Panel erscheinen lassen, ab drei Kreuze wird eine Linie gezogen zwischen zwei Punkten.
Einmal liegt eine ArrayList mit Points in der Klassenvariable 'jobaDrawPanelPoints' und diese will ich in die Point ArrayList 'jobaConvexHullPoints' übernehmen. Aktuell teste ich mich drei Punkten, die ich manuell von einer Collection in die andere übernehme. Leider ist es so, dass ich nachdem ich 3mal geklickt habe, die drei Punkte erschienen sind, aber ab dem vierten Punkt keiner mehr erscheint und auch die Linie nicht gezeichnet wird - es scheint was mit dem Bestücken der Collection falsch zu sein.
Es folgt der Code der Klasse, die beiden relevanten Methoden sind paintComponent(), da wird dann gezeichnet,a also im if-Zweig mit > 3 die Collection-Objekte rausgeholt und computeBruteForceConvexHull(), dort wird aktuell nur die Collection jobaConvexHullPoints aus der Collection jobaDrawPanelPoints bestueckt, später steckt da dann die Prozedur drin, die die konvexe Huelle richtig berechnet - so ist das für den Prototypen zumindest geplant.
Danke vorab für den ein oder anderen Tipp.
ich weiss gerade nicht woran es liegt, ich mache meine kleinen Tests um den Fehler einzukreisen und nun glaube, habe ich ihn.
Ich habe eine Gui-Klasse, die auch das Event-Handlung beinhaltet. Dann habe ich die Klasse JobaDrawPanel, das ist sozusagen, meine Zeichenfläche für die Gui. Nun kann man mit einem Klick ein Kreuz an der Stelle im Panel erscheinen lassen, ab drei Kreuze wird eine Linie gezogen zwischen zwei Punkten.
Einmal liegt eine ArrayList mit Points in der Klassenvariable 'jobaDrawPanelPoints' und diese will ich in die Point ArrayList 'jobaConvexHullPoints' übernehmen. Aktuell teste ich mich drei Punkten, die ich manuell von einer Collection in die andere übernehme. Leider ist es so, dass ich nachdem ich 3mal geklickt habe, die drei Punkte erschienen sind, aber ab dem vierten Punkt keiner mehr erscheint und auch die Linie nicht gezeichnet wird - es scheint was mit dem Bestücken der Collection falsch zu sein.
Es folgt der Code der Klasse, die beiden relevanten Methoden sind paintComponent(), da wird dann gezeichnet,a also im if-Zweig mit > 3 die Collection-Objekte rausgeholt und computeBruteForceConvexHull(), dort wird aktuell nur die Collection jobaConvexHullPoints aus der Collection jobaDrawPanelPoints bestueckt, später steckt da dann die Prozedur drin, die die konvexe Huelle richtig berechnet - so ist das für den Prototypen zumindest geplant.
Danke vorab für den ein oder anderen Tipp.
Code:
public final class JobaDrawPanel extends JPanel {
private static JobaDrawPanel drawPanel;
// Class attributes
// attributes
// relation help objects
private static ArrayList<Point> jobaDrawPanelPoints;
private static ArrayList<Point> jobaConvexHullPoints;
// class methods
public static synchronized JobaDrawPanel getInstance()
{
if ( JobaDrawPanel.drawPanel == null )
{
JobaDrawPanel.drawPanel = new JobaDrawPanel(); // Konstruktor aufrufen das geht
JobaDrawPanel.setJobaDrawPanelPoints();
}
return JobaDrawPanel.drawPanel;
}
public static void addThisPointToCollection(Point newPoint)
{
JobaDrawPanel.jobaDrawPanelPoints.add(newPoint);
}
public static void addRandomPoints(int number)
{
Point[] randomPoint = new Point[number];
for ( int i = 0; i < randomPoint.length; i++ )
{
randomPoint[i] = new Point( (int)(Math.random() * 1000), (int)(Math.random() * 1000));
JobaDrawPanel.jobaDrawPanelPoints.add(randomPoint[i]);
}
}
public static void removeThisPointFromCollection(Point point)
{
if ( jobaDrawPanelPoints.contains(point))
{
jobaDrawPanelPoints.remove(point);
}
else
{
System.out.println("Jobafehler in removeThisPointFromCollection-Methode");
}
}
public static void refreshJobaDrawPanel()
{
JobaDrawPanel.jobaDrawPanelPoints.removeAll(JobaDrawPanel.jobaDrawPanelPoints);
}
public static boolean compareThisPointToCollection(Point point)
{
if ( jobaDrawPanelPoints.contains(point))
{
return true; // leave method
}
return false;
}
/**
* compute convex hull the brute force way :-)
*
* This ArrayList will be stored in an attribute like the origin ArrayList.
* ArrayList can contain duplicate objects.
*
*/
private static void computeBruteForceConvexHull()
{
// ArrayList befeuern
Point ersterPoint = JobaDrawPanel.jobaDrawPanelPoints.get(1);
Point zweiterPoint = JobaDrawPanel.jobaDrawPanelPoints.get(2);
Point dritterPoint = JobaDrawPanel.jobaDrawPanelPoints.get(3);
JobaDrawPanel.jobaConvexHullPoints.add( ersterPoint );
JobaDrawPanel.jobaConvexHullPoints.add( zweiterPoint );
JobaDrawPanel.jobaConvexHullPoints.add( dritterPoint );
JobaDrawPanel.drawPanel.setBorder(BorderFactory.createLineBorder(Color.yellow));
}
public static void setJobaDrawPanelPoints()
{
JobaDrawPanel.jobaDrawPanelPoints = new ArrayList<Point>(120);
}
public static ArrayList<Point> getJobaDrawPanelPoints()
{
return JobaDrawPanel.jobaDrawPanelPoints;
}
// constructors
private JobaDrawPanel()
{
// necessary for singleton-pattern
}
// methods
/**
* paint collection of points on screen
*
*/
protected void paintComponent( Graphics g )
{
super.paintComponent(g);
// Print the Collection of Points on the Panel and build crosses
for ( Iterator<Point> i = JobaDrawPanel.jobaDrawPanelPoints.iterator(); i.hasNext(); )
{
Point pointAusgabe = i.next();
g.drawLine(
((int) pointAusgabe.getX()), // Senkrechte Linie des Punktkreuzes
((int)(pointAusgabe.getY() - 5)),
((int) pointAusgabe.getX()),
((int)(pointAusgabe.getY() + 5)) );
g.drawLine(
((int)(pointAusgabe.getX() - 5)), // Waagrechte Linie des Punktkreuzes
((int) pointAusgabe.getY()),
((int)(pointAusgabe.getX() + 5)),
((int) pointAusgabe.getY()) );
if ( JobaDrawPanel.jobaDrawPanelPoints.size() > 3)
{
// Jetzt den Rahmenwechsel aus der Methode - lafft
JobaDrawPanel.computeBruteForceConvexHull(); // bestueckt das Ding
// Collection Element 2 holen - malt das Ding
Point secondPoint = JobaDrawPanel.jobaConvexHullPoints.get(1);
Point thirdPoint = JobaDrawPanel.jobaConvexHullPoints.get(2);
g.drawLine(
(int) secondPoint.getX(),
(int) secondPoint.getY(),
(int) thirdPoint.getX(),
(int) thirdPoint.getY()
);
if ( JobaDrawPanel.jobaDrawPanelPoints.size() > 5 )
{
g.drawLine(50, 100, 55, 387); // lafft
}
}
}
// TODO draw and add convexHull
// statische Convexe Huelle
//
// Testhuelle will von
// 2,2 nach 8,2; von 3,11 nach 2,2; von 8,2 nach 10,5;
// von 10,5 nach 9,9; von 9,9 nach 3,11;
//
// Zugehoerigen Arraypunktkoordinaten sind
// 2,2; 4,3; 3,11; 8,2; 6,7; 10,5; 9,9;
}
}
Zuletzt bearbeitet: