Ich arbeite an einem Projekt über Graph-Coloring (mit GUI). Ich habe eine Karte in kleine Polygone unterteilt. Wenn ich auf eines dieser Polygone geklickt habe, möchte ich, dass es mit einer bestimmten Farbe gefüllt wird. Wie kann ich das machen?Den angeklickten Bereich in Java füllen
Ich habe meine Veranstaltung Zuhörer alle gesetzt. Ich kann den Bereich erkennen, auf den ich geklickt habe. Also, ich habe kein Problem mit dem Polygon, das ich bemalen werde. Ich habe versucht, die fillPolygon (Polygon p) -Methode das zu tun, es hat nicht funktioniert. Tatsächlich füllte es das Polygon, das ich will; aber als ich auf ein anderes Polygon klickte, färbte es das neue und löschte das ältere. Ich denke, ich weiß, was das verursacht: Ich habe das fillPolygon (Polygon p) in die Methode paintComponent (Graphics g) gestellt, die bei jedem Start des Programms die komplette Map in meinem Panel zeichnet.
Ich habe diese Methode in meiner Map-Klasse, um die Karte auf dem Panel zu zeichnen.
public void draw (Graphics screen) {
screen.setColor (Color.BLACK);
for (Polygon thePoly : theShapes)
screen.drawPolygon (thePoly.getPolygon());
}
Auch habe ich folgende Zeilen in meiner MapPanel-Klasse.
import java.awt.*;
import javax.swing.JPanel;
import javax.swing.*;
import java.awt.event.*;
public class MapPanel extends JPanel {
private Map theMap; // collection of Regions to be colored
/* Some other variables here */
public MapPanel() {
theMap = new Map();
this.addMouseListener(new ClickListener());
}
public JMenuBar getMenu() {
/* Bunch of lines for the main panel, menus etc... */
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
theMap.draw (g);
if(j != null)
g.fillPolygon(j.getPolygon());
}
private class ClickListener implements MouseListener
{
public void mousePressed (MouseEvent event)
{
Point p = event.getPoint();
for(int i = 0; i < theMap.theShapes.size(); i++){
if(theMap.theShapes.get(i).getPolygon().contains(p)) {
j = theMap.theShapes.get(i);
}
}
repaint();
}
public void mouseClicked (MouseEvent event) {}
public void mouseReleased (MouseEvent event) {}
public void mouseEntered (MouseEvent event) {}
public void mouseExited (MouseEvent event) {}
}
/* Other listener classes */
}
Wie kann ich die Methode fillPolygon (Polygon p) einzeln verwenden?
Vielen Dank im Voraus.
vielen Dank. Ich habe es herausgefunden. – 629