地図の上にガラス板がある Swing アプリがあります。
特定の位置にドットを描画します。マップ上のどこかをクリックすると、ガラス ペインが「CONTROLLER_NEW_POLYGON_MARK
I want do」というメッセージを受け取り、イベント データで指定された位置に追加のドットを表示します (「 」を参照MyGlassPane.propertyChange
)。
ガラス板クラスは と呼ばれMyGlassPane
ます。私が検証したデバッガーを使用するaddPointToMark
と、実際に呼び出されpropertyChange
ます。
しかし、追加のドットは画面に表示されません。
PointSetMarkingGlassPane.paintComponent
イベント ( ) が発生するたびに呼び出されるようにコードを変更するにはどうすればよいIEventBus.CONTROLLER_NEW_POLYGON_MARK
ですか?
public class PointSetMarkingGlassPane extends JComponent implements IGlassPane {
private final ILatLongToScreenCoordinatesConverter latLongToScreenCoordinatesConverter;
private final List<Point.Double> pointsToMark = new LinkedList<Point.Double>();
public PointSetMarkingGlassPane(final ILatLongToScreenCoordinatesConverter aConverter) {
this.latLongToScreenCoordinatesConverter = aConverter;
}
protected void addPointToMark(final Point.Double aPoint)
{
if (aPoint != null)
{
pointsToMark.add(aPoint);
}
}
@Override
protected void paintComponent(final Graphics aGraphics) {
for (final Point.Double pointToMark : pointsToMark)
{
final Point positionInScreenCoords = latLongToScreenCoordinatesConverter.getScreenCoordinates(pointToMark);
drawCircle(aGraphics, positionInScreenCoords, Color.red);
}
}
private void drawCircle(Graphics g, Point point, Color color) {
g.setColor(color);
g.fillOval(point.x, point.y, 10, 10);
}
}
public class MyGlassPane extends PointSetMarkingGlassPane implements PropertyChangeListener {
public MyGlassPane(ILatLongToScreenCoordinatesConverter aConverter) {
super(aConverter);
addPointToMark(DemoGlassPane.ARTYOM);
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (IEventBus.CONTROLLER_NEW_POLYGON_MARK.equals(evt.getPropertyName()))
{
addPointToMark((Point.Double)evt.getNewValue());
invalidate();
}
}
}