2012-06-11 2 views
1

캔버스에 이미지가 있고 이미지의 특정 부분을 터치하면 pointerPressed() 메서드 내에서 새 Canvas를 시작하려고합니다.pointerPressed() 메소드에서 새 Canvas를 표시하는 방법은 무엇입니까?

가능합니까? 지금까지 나는 다음과 같은 짓을 :

protected void pointerPressed(int x, int y){   
     if ((x>=164 && x<=173)&&(y>=24 && y<=36)){    
      disp.setCurrent(new elementDetails()); 
     } 
    } 

을 다음과 같이 클래스입니다 : 내가 실행하면

//class to show detailed information of elements 
class elementDetails extends Canvas{ 
    private Image elmDtlImg; 
    public elementDetails(){ 
     try{ 
      elmDtlImg = Image.createImage("/details.jpg"); 
     } 
     catch(IOException e){ 
      System.out.println("Couldn't load Detailed Info image" + e.getMessage()); 
     }    
    } 

    public void paint(Graphics g){ 
     //set the drawing color to white 
     g.setGrayScale(255); 
     //draw a big white rectangle over the whole screen (over the previous screen) 
     g.fillRect(0, 0, getWidth(), getHeight()); 
     g.drawImage(elmDtlImg, 0, 0, 20); 
    } 
} 

은 위의 코드 아무 일도 일어나지 않습니다. 현재 이미지가 캔버스에 표시하려고하는 새 이미지로 변경되지 않는다는 것을 의미합니다.

포인터가 눌린 후에도 응용 프로그램이 계속 실행됩니다. 그것은 충돌하지 않습니다. 그것은 저에게 이미지의 다른 부분의 좌표를 올바르게 보여줍니다. 내가 성취하고자하는 것은 그것입니다. 이미지의 특정 부분을 클릭하거나 터치하면 이전 캔버스 대신 새로운 캔버스를로드해야합니다.

+0

귀하의 코드는 당신이 원하는 것을 할 것 같다 요소의 자세한 정보를 표시합니다. 너 해봤 니? –

+0

위의 코드를 실행할 때 아무 일도 일어나지 않습니다 ... 현재 이미지가 캔버스에 표시하려고 시도하는 새 이미지로 변경되지 않는다는 것을 의미합니다. ( –

+0

응용 프로그램이 pointerPressed 이벤트 이후에 계속 실행되고 있습니까? 그냥 그 시점에서 교착 상태 –

답변

2

캔버스() 메서드 Display.setCurrent를 호출하여 표시되었을 우선은이 당신의 미들 릿에서 디스플레이를 검색하고 캔버스에 전달, 다음 하란이 조각을 희망 사용하는 것 코드 도움을 당신에게 :

// 미들 릿 :

public class MyMIDlet extends MIDlet{ 
    ... 
    final Canvas1 c1; 
    final elementDetails c2; 
    ... 
    public MyMIDlet(){ 
     c1 = new Canvas1(this); 
     c2 = new elementDetails(); 
    } 
    ... 
} 

// canvas1 :

public class Canvas1 extends Canvas{ 
    MyMIDlet myMidlet; 
    Display disp; 

... 
/** 
*constructor 
*/ 
public Canvas1(MyMIDlet myMidlet){ 
    this.MyMIDlet = myMidlet; 
    disp = myMidlet.getDisplay(); 
} 
... 
public void paint(Graphics g){ 
    g.setColor(255,255,255); 
    g.drawString("canvas1", 0, 0, 0); 
} 
... 

protected void pointerPressed(int x, int y){   
    if ((x>=164 && x<=173)&&(y>=24 && y<=36)){    
     disp.setCurrent(myMidlet.c2); 
} 
} 

// 클래스는

class elementDetails extends Canvas{ 
    private Image elmDtlImg; 
    public elementDetails(){ 
     try{ 
      elmDtlImg = Image.createImage("/details.jpg"); 
     } 
     catch(IOException e){ 
      System.out.println("Couldn't load Detailed Info image" + e.getMessage()); 
     }    
    } 
public void paint(Graphics g){ 
    //set the drawing color to white 
    g.setGrayScale(255); 
    //draw a big white rectangle over the whole screen (over the previous screen) 
    g.fillRect(0, 0, getWidth(), getHeight()); 
    g.drawImage(elmDtlImg, 0, 0, 20); 
} 
} 
+0

사용중인 플랫폼은 J2ME 이미지를 프로젝트에로드해야합니다. 이미지를 폴더에 넣고 그 폴더를 프로젝트에 넣으십시오 –

+0

@Ameer Moaaviah :이 사건은 아무런 의무도 없습니다, OK? – hasanghaforian

+0

죄송합니다. 'hasanghaforian'의 제안을 구현하려고 시도했습니다. 예, 필요한 모든 이미지를 'res'라는 폴더에 보관하고 프로젝트에도 포함 시켰습니다. –

관련 문제