2016-11-25 14 views
-1

多角形onMouseMove()イベントを作成したいとします。マウスを移動してJavaを使用してポリゴンを作成するイベント

public DrawingListners(JMapPane mappane) { 
    this._Pane = mappane; 
    this._Pane.addMouseListener(new MapMouseAdapter() { 
     @Override 
     public void onMouseClicked(MapMouseEvent ev) { 
      if (ev.getClickCount() == 2 && _Drawing == Drawings.Polygon) { 
       CreateFeatureCollection(); 
       addPolygonToFC(poly); 

       for (int i = 0; i < nNumbers; i++) { 
        System.out.println(poly.xPoints[i] + ":" + poly.yPoints[i]); 
       } 

       notifyParent.firePropertyChange(CallType.Drawing.toString(), null, null); 
       dragged = false; 
       graphics.dispose(); 
       graphics = null; 
       startPos = null; 
       poly = null; 
       nNumbers = 0; 
      } 
     } 

     @Override 
     public void onMousePressed(MapMouseEvent ev) { 
      if (enabled) { 
       startPos = new Point(ev.getPoint()); 
       if (_Drawing != Drawings.Marker) 
        dragged = true; 
       if (poly == null) { 
        poly = new pMapPolygon(); 
       } 
       poly.addPoint(startPos.x, startPos.y, nNumbers); 
       nNumbers++; 
      } 
     } 

     @Override 
     public void onMouseMoved(MapMouseEvent ev) { 
      if (enabled && poly != null) { 
       ensureGraphics(); 
       if (_Drawing == Drawings.Polygon) { 
        poly.addPoint(ev.getPoint().x, ev.getPoint().y, nNumbers); 
        //graphics.drawPolygon(poly.xPoints, poly.yPoints, poly.xPoints.length); 

        graphics.setColor(Color.blue); 
        graphics.fillPolygon(poly.xPoints, poly.yPoints, poly.xPoints.length); 
        //graphics.drawPolygon(poly.xPoints, poly.yPoints, poly.xPoints.length); 

       } 
      } 
     } 

     @Override 
     public void onMouseDragged(MapMouseEvent ev) { 

     } 

     @Override 
     public void onMouseReleased(MapMouseEvent ev) { 

     } 

     private void ensureGraphics() { 
      if (graphics == null) { 
       graphics = (Graphics2D) _Pane.getGraphics(); 
       graphics.setColor(Color.WHITE); 
       graphics.setXORMode(Color.RED); 
      } 
     } 
    }); 
} 
} 
class pMapPolygon { 
int[] xPoints = new int[500]; 
int[] yPoints = new int[500]; 
int nNumber = 0; 

public pMapPolygon() { 
} 

public void addPoint(int x1, int y1, int number) { 
    // System.out.println(x1 + ":" + y1); 
    if (number == 0) { 
     for (int i = number; i < xPoints.length; i++) { 
      xPoints[i] = x1; 
      yPoints[i] = y1; 
     } 
    } else { 
     xPoints[number] = x1; 
     yPoints[number] = y1; 
    } 

    nNumber = number; 
} 
} 

を、私はこれを達成するために何をする必要がありますどのような:ここで

は、私が試した何ですか?私は間違って何をしていますか?

私は必要なパラメータxPointsyPoints、すべてのxy年代を格納している配列にポイントを追加する機能を有しているポリゴンクラスpMapPolygonを作成しました。

addPoint()onMousePressed()onMouseMoved()に指定しました。しかし、アプリケーションを起動すると、正しいポリゴンが生成されません。

+0

あなたはどの宇宙ですか?どのような言語ですか? – gpasch

+0

スタックオーバーフローへようこそ。使用しているコンポーネントの名前などのコンテキストを入力してください。何がうまくいかないかについても説明してください。正しいポリゴンが得られない場合は、正しいポリゴンとそれが生成するポリゴンの違いを教えてください。スクリーンショットを表示する。迅速かつ正確に答えられる質問をする方法については、http://stackoverflow.com/help/how-to-askをご覧ください。 – LarsH

答えて

0

マップコントロールを描画する適切な方法を示唆するのに時間がかかるので、マップコントロールのpaintComponentメソッドをオーバーライドする必要があります。

@Override 
protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     if (drawingLock.tryLock()) { 
      try { 
       Graphics2D g2 = (Graphics2D) g; 
       if (baseImage != null) {       
         g2.drawImage(baseImage, imageOrigin.x, imageOrigin.y, null); 
       } 
       if (this._Drawing != null) { 
         if (this.poly != null && this._Drawing == Drawings.Polygon) {        
          //g.setColor(Color.gray); 
          g2.fillPolygon(this.poly.xPoints, this.poly.yPoints, this.poly.xPoints.length); 
         } 
         if (this.rect != null && this._Drawing == Drawings.Rectangle) { 
          //g.setColor(Color.gray); 
          g2.fillRect(rect.x, rect.y, rect.width, rect.height); 
         } 
         if (this.rect != null && this._Drawing == Drawings.Oval) { 
          //g.setColor(Color.gray); 
          g2.fillOval(rect.x, rect.y, rect.width, rect.height); 
         } 
         if (this.ln != null && this._Drawing == Drawings.Line) { 
          //g.setColor(Color.black); 
          g2.drawLine(ln._x1, ln._y1, ln._x2, ln._y2); 
         } 
       }      
      } finally { 
       drawingLock.unlock(); 
      } 
     } 
} 
関連する問題