2010-12-30 2 views
0

상자를 그리고 선으로 연결하는 응용 프로그램을 작성하고 있습니다. 각 줄에는 모서리 (점)가 있습니다. 사용자는 선을 마우스 오른쪽 버튼으로 클릭하여 점을 추가 할 수 있습니다. 그런 다음 점은 위치 집합을 얻습니다.페인트 작업이 실행되고 있지 않지만 시스템이 꺼져 있습니다

다이어그램의 페인트 방법은 모든 점을 반복하고 사용자 정의 (단순, 복귀 (위치! = -1))인지 확인합니다.이 경우 해당 위치에 원 이미지를 그려야합니다.

이제 디버그 모드로 실행되기 때문에 내 소리가 찢어 지지만 그릴 수는 없습니다. 나는 체크 아웃 시스템을 배치하고 정상적으로 실행됩니다. 하지만 if 문은 if place! if 문 앞에 서명하십시오. 나는 정말로 그 문제를 발견 할 수 없다.

페인트 방법 :

public void paint(Graphics2D g) { 
    g.setColor(Color.RED);//_lineColor); 
    g.setStroke(new BasicStroke(DEFAULT_LINE_SIZE)); 

    for(Line2D line : _lines) { 
     g.draw(line); 
    } 

    if(_isHover) { 
     for(ConnectionDot dot : _connectionDots) { 
      if(dot.isUserDot()) { 
       System.out.println("YEAH!!!"); 
       //TODO: dot hover? 
       g.drawImage(_icoConnectionNor.getImage(), dot.getX()-8, dot.getY()-8, null); 

       //g.drawString("What?", dot.getX(), dot.getY()); 
      } else { 
       System.out.println("Hell No!"); 

       g.drawString("What?", dot.getX(), dot.getY()); 
      } 
     } 
    } 
} 

점 클래스 :

public class ConnectionDot { 
//... 
private int _userDotQueueLoc; 

/** 
* Create new dot. 
* 
* @param gridController reference to the grid controller. 
* @param grid Grid position of the dot. 
*/ 
public ConnectionDot(GridController gridController, Grid grid){ 
    _gridController = gridController; 
    _gridPos = grid; 
    _userDotQueueLoc = -1; 
} 

/** 
* Create new user dot. 
* 
* @param gridController reference to the grid controller. 
* @param grid Grid position of the dot. 
* @param userDotLocation Location of user dot. 
*/ 
public ConnectionDot(GridController gridController, Grid grid, int userDotLocation){ 
    this(gridController, grid); 
    _userDotQueueLoc = userDotLocation; 
} 

/** 
* Returns true if the dot is custom. 
* 
* @return Flag. 
*/ 
public boolean isUserDot(){ 
    return (_userDotQueueLoc != -1); 
} 

}

콘솔 출력 : 지옥 아니! 지옥 아니요! 지옥 아니요! 지옥 아니요! 예! 지옥 아니요! 지옥 아니요! 지옥 아니요! 지옥 아니요! 예! ... 포인트를 얻으십시오

+1

더 나은 도움을 받으려면 SSCCE (http://pscode.org/sscce.html)를 게시하십시오. –

+0

당신이 생각하는 곳에서는 드로우 링해서는 안됩니다. Andrew가 말했듯이 SSCCE를 게시해야합니다. – jzd

+0

좋아 .. 그냥 링크를보고 정말 그걸로 무엇을 해야할지 모르겠다. (많은 읽기 : P)하지만 문제가 발견되었습니다. –

답변

0

어쩌면 점의 x/y 값이 올바르지 않을 수 있습니다.

(0, 0)에서 문자열 그리기는 drawString이 포인트가 왼쪽/왼쪽이 아닌 왼쪽/위쪽이 될 것으로 예상하므로 문자열을 표시하지 않습니다.

이미지를 그리는 중 하나는 상단/왼쪽을 사용하므로 8을 빼면 패널에서 이미지가 이동합니다.

하지만 다른 사람들은 SSCCE를 게시하는 것이 유일한 방법이라는 것을 지적했습니다.

+0

감사! 실제로는 문제가 아니었지만 점의 위치를 ​​생각하게 만들었습니다. 도트의 위치는 격자이며 addUserDot 메소드에서 실수로 격자 위치 대신 x 및 y 포인트를 추가했습니다. 따라서 위치 3020,2393 정도에서 그렸습니다. –

0

아마도 강제로 화면을 다시 칠할 필요가 있습니까? 그것은 당신의 행동을 읽었을 수도 있지만 그것을 표시하지는 않습니다. 나는 'Graphics2D'로 일한 적이 없기 때문에 그 방법을 모른다.하지만 쉽게 찾을 수 있어야한다.

+0

올바르지 않습니다. paintln이 콘솔에 표시되므로 paint 메서드가 호출됩니다. 문제는 다른 곳에있다. – jzd

관련 문제