本世纪最大的难题,JAVA中 矩形和椭圆怎么做成用MOUSE拖动旋转,难倒我一周多了,谢谢,最好有例子代码,谢谢了,解决问题给200分,能帮助我解决问题的也给分,谢谢了,谢谢大家.
解决方案 »
- Java接口 Im不是抽象的, 并且未覆盖A中的抽象方法doSomething()
- java 如何取得图片的宽度,厘米而非象素
- 求教 文件读取到最后一行时总是报错。麻烦高手详细解释或更正
- 在android中解析以下xml文件,急急急。
- unreported exception org.apache.commonms.configuration.ConfiguationException ;must be caught or declared to be thrown
- 请问正则表达式可以实现如下的功能么?
- 新手请教!
- 请指点:关于JComboBox的用法
- Applet非常奇怪的问题 奇怪直极!!!!!!!
- 为什么在appletviewer里运行正常的applet,在ie中运行不正常
- 有没有 英文的java教程视频的下载?谢谢
- 这个很简单的问题,我弄的很糊涂,请高人指点一下谢谢!
给你写了一个旋转的代码看看
public class TestPanel extends JPanel implements ActionListener{
Timer timer=new Timer(100,this);
double angle=0;
public TestPanel() {
timer.start();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
g2.rotate(angle,125,150);
g2.drawRect(100,100,50,100);
g2.rotate(-angle,125,150);
g2.drawLine(50,50,100,50);
} public void actionPerformed(ActionEvent actionEvent) {
angle+=Math.PI/100;
if(angle>Math.PI*2){
angle=angle-Math.PI*2;
}
this.repaint();
}
}
private ImageIcon icon;
private Image image;
private AffineTransform t;
private static int translate=100;
private static int rotate=30;
private static int Count=0;
private static int CountArea=0;
private Area area;
public LXXPanel()
{
icon=new ImageIcon(getClass().getResource("fight.gif"));
t=new AffineTransform();
t.setToTranslation(300,100);
image=icon.getImage();
addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent event)
{
Point2D point =event.getPoint();
rotate(point); }
});
addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseDragged(MouseEvent event)
{
pictureDragged(event.getPoint()); }
});
area=new Area();
}
public void repaint()
{
System.out.println("DO repaint?");
Graphics g2=this.getGraphics();
paintComponent(g2);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
g2.drawImage(image,t,null);
System.out.println(area.isEmpty());
if(area.isEmpty())
{
area=new Area(new Rectangle2D.Double(100,100,100,100));
g2.fill(area);
System.out.println("do?");
g2.drawString("It is the area repaint "+Integer.toString(CountArea++),200,200);
}
g2.drawString("It is the whole panel repaint "+Integer.toString(Count++),100,100); }
public void rotate(Point2D point)
{
if(rotate>360) rotate=0;
t.setToRotation(Math.toRadians(rotate),point.getX(),point.getY());
rotate+=30;
repaint();
}
public void translate()
{
}
public void sheer()
{
}
public void pictureDragged(Point2D point)
{
// t.setToTranslation(point.getX(),point.getY());
t=new AffineTransform().getTranslateInstance(point.getX(),point.getY());
repaint();
} }
部分代码 拿去改改 根据鼠标移动点重画就行
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.MouseInputAdapter;
public class DragDemo extends JPanel
{
Rectangle r;
public DragDemo()
{
DragController controller = new DragController(this);
addMouseListener(controller);
addMouseMotionListener(controller);
}
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
if(r == null)
initRect();
g2.draw(r);
}
protected void setRect(int x, int y)
{
r.setLocation(x, y);
repaint();
}
private void initRect()
{
int w = getWidth();
int h = getHeight();
r = new Rectangle(w/4, h/3, w/2, h/6);
}
public static void main(String[] args)
{
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new DragDemo());
f.setSize(400,400);
f.setLocation(200,200);
f.setVisible(true);
}
}
class DragController extends MouseInputAdapter
{
DragDemo demo;
Point offset;
boolean dragging;
public DragController(DragDemo dd)
{
demo = dd;
offset = new Point();
dragging = false;
}
public void mousePressed(MouseEvent e)
{
Point p = e.getPoint();
if(demo.r.contains(p))
{
offset.x = p.x - demo.r.x;
offset.y = p.y - demo.r.y;
dragging = true;
}
}
public void mouseReleased(MouseEvent e)
{
dragging = false;
}
public void mouseDragged(MouseEvent e)
{
if(dragging)
{
int x = e.getX() - offset.x;
int y = e.getY() - offset.y;
demo.setRect(x, y);
}
}
}