2012-06-08 2 views
0

Jlabel 내에 사용자가 단추를 눌렀을 때 오른쪽으로 90도 회전하려는 이미지가 있습니다. 나는 그것을 시도했지만 여러 가지 오류가있다. Graphics2D를 사용하는 것이 가장 좋은 방법이라고 들었습니까?회전 JLabel 90도 Java

메인 클래스 :

private void SearchButtonActionPerformed(java.awt.event.ActionEvent evt) {   
BufferedImage image; 
     try { 
      image = ImageIO.read(file); 
      Image scaled = image.getScaledInstance(Jlabel1.getWidth(), Jlabel1.getHeight(), 5); 
      Jlabel1.setIcon(new ImageIcon(scaled)); 

버튼 :

private void rotateButtonActionPerformed(java.awt.event.ActionEvent evt) { 
     Graphics2D userImage = (Graphics2D)JLabel1.getGraphics(); 
    userImage.rotate(Math.toRadians(90)); 
    userImage.drawImage(JLabel1, JLabel1.getHeight(), JLabel1.getWidth()); 
    } 
+2

*는 * '조차 응답 가치'느낌에 리드 "가치도 게시하지 않습니다." –

+1

"게시 할만한 가치가 없습니다"라는 말은 그들이 필요로하는 것을 잘 벗어 났음을 의미합니다. –

+1

기본적으로 관련 코드는 게시하지 말고이를 수행하는 방법을 요청하십시오. 따라서 중요한 정보가 누락되었습니다. 송장을 어디로 보내야합니까? – Robin

답변

2

당신은 적 구성 요소를 그리기 위해 Component.getGraphics()를 사용해서는 안됩니다. 대신에 항상 paintComponent를 덮어 쓰고 전달 된 Graphics 객체로 작업해야합니다.

Component.getGraphics()는 단순히 작동하지 않습니다. Java는 그래픽을 그리는 데 콜백 메커니즘을 사용합니다. getGraphics()를 사용하여 그래픽 정보를 구성 요소에 "밀어 넣으려고"합니다. 대신 은 Java가 당신의 paint()/paintComponent() 메소드를 호출 할 때까지 기다려야합니다. 메소드. 그 순간 당신은 당신이하고자하는 그림을 과 함께 Component를 제공해야합니다. 자바가 (예를 들어 다른 창으로 오버레이) 가려 할 때 이 창 내용을 기억하지 못하는 그래픽 시스템을 지원할 수 있도록

이 메커니즘이 필요하다. 창이 다시 보일 때, 그러한 그래픽은 시스템이 응용 프로그램에 창 내용을 재구성하도록 요청해야합니다. 따라서 paint()/paintComponent()는 구성 요소의 메모리로 간주됩니다. 그러나 getGraphics()에는 이전 그리기 작업 의 기억이 없습니다. 따라서 getGraphics() 을 통해 완료된 도면은 손실되고 재구성 될 수 없습니다. 에는 이전 드로잉 데이터가 저장되어 있으며 AWT/Swing에는 아무 것도 없으며 은 getGraphics()에 다시 그리기를 알리는 내용이 없습니다.

또한, Component.getGraphics() 간단히 이 null을 반환하는 상황이 있습니다. 이것은 메소드의 정의 된 동작입니다. 그리고 마지막으로 대부분의 getGraphics() 사용자는 사용 후 Graphics 객체 을 삭제하는 것을 잊어 버립니다.

http://www.pscode.org/guifaq.html

관련 문제