Я работаю над проектом по раскраске графов (с графическим интерфейсом). У меня есть карта, разделенная на маленькие полигоны. Когда я нажал на один из этих многоугольников, я хочу, чтобы он был заполнен определенным цветом. Как я могу это сделать?
У меня все слушатели настроены. Я могу распознать область, на которой щелкнул. Итак, у меня нет проблем с тем, какой полигон я собираюсь раскрасить. Я попытался сделать это методом fillPolygon (Polygon p), он не сработал. На самом деле, он заполнил многоугольник, который я хочу; но когда я щелкнул по другому многоугольнику, он покрасил новый и стер старый. Я думаю, я знаю, что является причиной этого: я поместил fillPolygon (Polygon p) в метод paintComponent (Graphics g), который рисует полную карту на моей панели при каждом запуске программы.
У меня есть этот метод в моем классе Map, чтобы нарисовать карту на панели.
public void draw ( Graphics screen ) {
screen.setColor ( Color.BLACK );
for ( Polygon thePoly : theShapes )
screen.drawPolygon ( thePoly.getPolygon() );
}
Кроме того, у меня есть следующие строки в моем классе MapPanel.
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 */
}
Как я могу использовать метод fillPolygon (Polygon p) по отдельности?
Заранее спасибо.