我正在开发一个关于图形着色(使用GUI)的项目。我有一张分成小多边形的地图。当我点击其中一个多边形时,我希望它填充特定的颜色。我怎样才能做到这一点?在Java中填充单击的区域
我得到了我的事件监听器全部设置。我可以识别我点击的区域。所以,我对将要着色的多边形没有问题。我尝试了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)方法?
在此先感谢。
我刚刚在我的第一条消息中添加了一些行。 – 629 2010-12-10 02:30:49
因此,正如您在上面看到的那样,Map类中的颜色最初设置为黑色,MapPanel类中的paintComponent()方法使用该颜色。当我在该方法中添加g.fillPolygon行时,我无法控制颜色。那么,有没有其他方法可以更有效地使用paintComponent()方法? – 629 2010-12-10 02:35:20