Я работаю над проектом о графическом оформлении (с графическим интерфейсом). У меня есть карта, разделенная на маленькие полигоны. Когда я нажал на один из этих полигонов, я хочу, чтобы он был заполнен определенным цветом. Как я могу это сделать?Заполнение области щелчка в 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, а метод paintComponent() в классе MapPanel использует этот цвет. Когда я добавил строку g.fillPolygon в этот метод, я не могу управлять цветом. Итак, есть ли другой способ, более эффективно использовать метод paintComponent()? – 629 2010-12-10 02:35:20