모르겠습니다.
 
class StickTest{
 public static void main(String[] args){
  Frame frm = new Frame("TT");
  Canvas canvas=new Canvas();  
  frm.setSize(200, 200);
  frm.add(canvas, "Center");
  frm.setVisible(true);
  
  Graphics g=canvas.getGraphics();
  g.setColor(Color.blue);
  g.drawString("Hello", 20, 50);
  //g.drawLine(20, 20, 20, 40);
  //g.drawLine(20, 40, 40, 40);
  g.fillRect(20, 20, 40, 40);
 }
}

-------------------------------
캔버스 이용해서 그리기 하는데
g.drawString(); 메소드를 함께 실행시키지 않으면
g.drawLine(), g.drawRect(), g.fillRect() 모두
화면에 보이질 않습니다. g.drawString()을 같이 해야만 나오고 있는 상황인데...

혹시 보실까 싶지만 보신다면 ㅜ.ㅡ...
by LetsJava | 2008/12/04 11:04 | 시스템프로젝트 | 트랙백 | 덧글(1)
트랙백 주소 : http://LetsJava.egloos.com/tb/1213424
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 김교수 at 2008/12/04 17:56
원래 이렇게 그림을 그리려면 그리는 명령들은 캔버스의 paint메소드를 오버라이드해야 하는 것이죠. 그렇게 하면 아무런 문제가 없습니다. paint메소드는 캔버스가 보여지면서 자동으로 수행이 된다는 것은 알고 있죠? 그런데 paint에 아무런 그림그리는 정의가 되어 있지 않으면 paint는 캔버스를 지우는 동작을 하게됩니다.

위의 프로그램에서는 main쓰레드의 그리는 명령들이 하도 빨리 진행하여서 캔버스의 paint가 나중에 실행되니 그려놓은 것을 지우게 되는 것입니다. g.drawString(); 메소드를 실행시키면 g.drawLine()이 그려지는 것은 g.drawString()이 g.drawLine()이 실행되는 시간을 지연시킨 효과를 주었기 때문에 유효적절하게도 paint가 실행되고 나서 g.drawLine()이 실행되어 그려진 것이지요. 다른 PC에서 돌리면 이마저도 그려지지 않을 수도 있습니다.

실제로 frm.setVisible(true);과 Graphics g=canvas.getGraphics();사이에 Thread.sleep(1000) 정도를 삽입해 보시기 바랍니다. 그럼 문제없이 다 실행될 것입니다.

:         :

:

비공개 덧글