게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
자바app JPanel에서 repaint가 안되서 질문 드립니다.
게시물ID : programmer_3407짧은주소 복사하기
작성자 : 악귀히로
추천 : 0
조회수 : 1599회
댓글수 : 4개
등록시간 : 2014/05/21 00:12:59
옵션
  • 베스트금지
class panel extends JPanel

     void main()
    {
        component com = new component();
        add(com,layout);
        trd = new Thread(circle);
        trd.start();
    }
}
 
class component extends JPanel implements Runnable
{
     public void run()
     {
        Draw fill = new Draw();
        Thread fillTrd = new Thread(fill);
        fillTrd.start();
     }
 
     public void paint(Graphics g)//까만원 그리기
     {
          super.paint(g);
          Graphics2D g2 = (Graphics2D) g;
          g2.setColor(Color.black);
          g.fillOval(35,25,210,210);
     }
    }
 
public class Draw extends JPanel implements Runnable{
 public void run()
 {
      repaint();//이부분이 안됩니다
      System.out.println("확인1");
 }
 public Color color = new Color(255,0,0);
 
 public void paint(Graphics g) //빨간원 그리기
 {
      System.out.print("확인2");
      super.paint(g);
      Graphics2D g2 = (Graphics2D) g;
      g2.setColor(color);
      g.fillOval(40,30,200,200);
 }
}
 
소스는 최대한 간략하게 간추렸습니다
panel에 add를 해서 component 클래스의 까만원을 그립니다
이후 fillTrd.start();로 스레드가 실행되면 Draw클래스의 빨간 원으로 repaint되어 색이 바뀌어지는것이 목적입니다
 
실행을 해 보니 repaint부분은 그냥 지나치는것인지 확인2라는 문구가 안나고오 오로지 확인1만 나옵니다.
원래는 component의 run 메소드 안에서 repaint 처리를 했었는데 run메소드자체를 최대한 빠르게 수행해야 하는지라
처리속도를 조금이나마 줄여보려고 라인을 줄이고 스레드로 나눴습니다
 
교재에는 별다른 내용이 없고 인터넷에서 찾아보아도 제게 맞는 답이 없어서 이렇게 글을 쓰게 되었습니다
읽어주셔서 감사하고 도움주시면 감사하겠습니다
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호