자바

2010-02-11 3 views
3
에 대한 회전 위젯을 찾으십시오

나는 이미지를 x도 회전시키는 자바 응용 프로그램의 기능이 있습니다. 지금 나는 회전 각도를 사용자로부터 두 배로 수집하는 간단한 JOptionPane을 팝업한다.자바

회전 각도를 시각적으로 설정하기 위해 사용자가 원 위에있는 점을 클릭/드래그 할 수있는 Java 위젯이 있습니까?

이미 체크 아웃 : AWT, SWT, 스윙

답변

2

왜 자신을 만들 수 있습니까? 그것은 매우 간단해야합니다. 다음은 몇 분 안에 작성한 간단한 초안입니다 ... 원하는대로 변경할 수 있습니다.

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionAdapter; 
import java.awt.event.MouseMotionListener; 
import java.awt.geom.AffineTransform; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 


/** 
* @author Savvas Dalkitsis 
*/ 
public class Test { 

    public static void main(String[] args) { 
     JFrame f = new JFrame("Test"); 
     final JRotation rot = new JRotation(); 
     f.getContentPane().add(rot); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.pack(); 
     f.setVisible(true); 
     rot.addMouseMotionListener(new MouseMotionAdapter() { 
      @Override 
      public void mouseDragged(MouseEvent e) { 
       System.out.println(rot.getRotation()); 
      } 
     }); 
    } 

} 

@SuppressWarnings("serial") 
class JRotation extends JPanel implements MouseMotionListener { 

    private double rotation = 1; 
    public double getRotation() { 
     return rotation; 
    } 

    public JRotation() { 
     setPreferredSize(new Dimension(100, 100)); 
     addMouseMotionListener(this); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     Graphics2D g2 = (Graphics2D)g.create(); 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g2.setPaint(Color.white); 
     g2.fillRect(0, 0, getWidth(), getHeight()); 
     g2.setPaint(Color.black); 
     AffineTransform t = g2.getTransform(); 
     g2.translate(getWidth()/2, getHeight()/2); 
     g2.rotate(-rotation); 
     g2.drawLine(0, 0, Math.max(getWidth(),getHeight()), 0); 
     g2.setTransform(t); 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 
     int x = e.getX(); 
     int y = e.getY(); 
     int midX = getWidth()/2; 
     int midY = getHeight()/2; 
     if (x>midX) { 
      if (y>midY) { // fourth quadrant 
       rotation = 2*Math.PI - Math.atan((y-midY)/(double)(x-midX)); 
      } else { // first quadrant 
       rotation = Math.atan((midY-y)/(double)(x-midX)); 
      } 
     } else { 
      if (y>midY) { // third quarter 
       rotation = Math.PI + Math.atan((y-midY)/(double)(midX-x)); 
      } else { // second quarter 
       rotation = Math.PI - Math.atan((midY-y)/(double)(midX-x)); 
      } 
     } 
     repaint(); 
    } 

    public void mouseMoved(MouseEvent e) {} 

} 
+0

저에게 맞는 작품입니다. 방금 미리 포장 된 방법이 있어야한다고 생각했습니다. 시간을내어 입력 해 주셔서 감사합니다. – altus