2013-10-08 42 views
0

以我類X我已經擴展JPanel和實施MouseListenerMouseMotionListener爲什麼我的MouseListener不按順序遞增變量?

int numPoints = 0; 
Point controlPoints[] = new Point[10]; 

public void MousePressed (MouseEvent arg0) { 
    if (numPoints < 5) 
    controlPoints[numPoints] = arg0.getPoint(); 
    numPoints++; 
} 

* 當我的System.out.println(爲NumPoints); *

3 CLICKS後輸出;

爲何不被1,2,3 INCREMENT ?? ?

輸出(用於爲NumPoints)(第一鼠標點擊)

***我將在必要時提供更多信息。


感謝您的答覆。這裏是完整編輯的javacode。這個問題對我來說還沒有解決。我期待着新的想法和更正。在此先感謝

package work2014.java.all; 

java.awt.*; 
import java.awt.event.* 
import java.util.ArrayList; 

import javax.swing.*; 


class jdrawPanel extends JPanel implements MouseListener, MouseMotionListener,   ActionListener 
{ 


Graphics g; 
boolean paint = false, edit = false; 
Point d; 
Point curvePoints[]= new Point[100]; 
Point[] controlPoints = new Point[99]; 
int n = 99, i = 3; 
private int numPoints = 0; 


public void paintComponent(Graphics g){ 
    addMouseListener(this); 
    addMouseMotionListener(this); 

    super.paintComponent(g); 
     if(numPoints >= 0 && numPoints < controlPoints.length) 
     Dot(numPoints,controlPoints,g); 
     if(paint == true && numPoints >= 3){ 
      drawBezier(n, i, controlPoints, g); 
    } 

    this.requestFocus(); 
} 


public void Dot(int numPoints, Point controlPoints[], Graphics g){ 

    draw red dot 
} 


public void drawBezier(int n, int i, Point controlPoints[], Graphics g) 
{ 
    draw spline 

} // End drawBezier 




@Override 
public void mouseMoved(MouseEvent arg0) { 
    Point p = arg0.getPoint(); 
    if (equalPoint(p) == p) 

     setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 
    else 
     setCursor(Cursor.getDefaultCursor()); 

} 



@Override 
public void mousePressed(MouseEvent arg0) { 
    paint = true; 
    Point d = arg0.getPoint(); 

    if(numPoints <= 10) { 
     controlPoints[numPoints] = d; 
        numPoints++; 
     System.out.println(numPoints); 
    } 
    repaint(); 

} 



} 

class Oving5_Frame extends JFrame 
{ public Oving5_Frame() 
{ setTitle("Hello draW v2"); 
    setSize(600, 600); 

    addWindowListener(new WindowAdapter() 
    { public void windowClosing(WindowEvent e) 
     { System.exit(0); 
     } 
    }); 

    Container contentPane = getContentPane(); 
    contentPane.setLayout(new BorderLayout()); 
    contentPane.add(new jdrawPanel, BorderLayout.CENTER); 
    contentPane.add(class_menu(), BorderLayout.NORTH); 
} 




    public class Oving5_launch 
    { 
    public static void main(String[] args) 
    { 
    JFrame frame = new Oving5_Frame(); 
    frame.show(); 
    } 



} 
+0

請理智地格式化你的代碼 - 我以爲你不* *其實對你的真實源一行的所有代碼。 –

+0

其中是您的代碼中的輸出? –

+0

你在哪裏添加了'println'語句? – micha

回答

0
int numPoints = 0; 
Point controlPoints[] = new Point[10]; 

public void MousePressed (MouseEvent arg0) { 
    if (numPoints < 5) 
    controlPoints[numPoints++] = arg0.getPoint(); 
    System.out.println(numPoints); 
} 

這工作得很好,我(我沒有使用鼠標事件,只是用一個循環來調用該方法的10倍。)

0

或許你也應該檢查事件對象的屬性以查看您正在響應的事件類型。你最需要的地方是if (arg0.getID() == MouseEvent.MOUSE_CLICKED)