gpt4 book ai didi

java - 寻找java的旋转小部件

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:41:57 26 4
gpt4 key购买 nike

我的 Java 应用程序中有一个函数可以将图像旋转 x 度。现在我弹出一个简单的 JOptionPane,它从用户那里收集旋转角度作为 double 值。

是否有一个 java 小部件允许用户单击/拖动到圆上的一个点以直观地设置旋转角度?

已经 checkout :亚运会,斯威特, Swing

最佳答案

为什么不自己创建一个呢?做起来应该相当简单。这是我在几分钟内完成的快速草稿...您可以根据自己的喜好进行更改:

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) {}

}

关于java - 寻找java的旋转小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2242152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com