Java 使用鼠标侦听器移动绘制的形状
在一个简单的Paint java项目中,需要绘制形状,例如直线、圆、矩形等,。。。。。。。。 我正在尝试编写可以移动、删除和调整选定形状大小的方法。 我的代码应该是正确的,因为我已经在另一个有一个绘制矩形的项目中测试了它。 my paintComponent方法选择形状并将其添加到ArrayListJava 使用鼠标侦听器移动绘制的形状,java,mouseevent,graphics2d,mouselistener,Java,Mouseevent,Graphics2d,Mouselistener,在一个简单的Paint java项目中,需要绘制形状,例如直线、圆、矩形等,。。。。。。。。 我正在尝试编写可以移动、删除和调整选定形状大小的方法。 我的代码应该是正确的,因为我已经在另一个有一个绘制矩形的项目中测试了它。 my paintComponent方法选择形状并将其添加到ArrayList @Override protected void paintComponent(Graphics g) { super.paintComponent(g);
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
for (ShapeItem item :shapes) {
if (!(item.getShape() instanceof Line2D)){
g2d.setColor(item.getColor());
g2d.fill(item.getShape());
}
else {
// g2d.setStroke(new BasicStroke(10));
g2d.setColor(item.getColor());
g2d.draw(item.getShape());
}
}
if (selectedShape != null){
g2d.setStroke ( new BasicStroke(1f,
BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND,
1f,
new float[] {2f},
0f) );
if (selectedShape.getShape() instanceof Ellipse2D) {
Rectangle rect = selectedShape.getShape().getBounds();
g2d.draw(rect);
}
else if (selectedShape.getShape() instanceof Rectangle2D) {
Rectangle2D dotted = new Rectangle2D.Double((int)((Rectangle2D) selectedShape.getShape()).getX() - 6,
(int)((Rectangle2D) selectedShape.getShape()).getY() - 6,
(int)((Rectangle2D) selectedShape.getShape()).getWidth() + 12,
(int)((Rectangle2D) selectedShape.getShape()).getHeight() + 12);
g2d.draw(dotted);
}
else if (selectedShape.getShape() instanceof Line2D) {
Rectangle rect = selectedShape.getShape().getBounds();
g2d.draw(rect);
}
else if (selectedShape.getShape() instanceof Polygon) {
Rectangle rect = selectedShape.getShape().getBounds();
g2d.draw(rect);
}
}
}
类来移动形状
package draw;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
//import java.awt.event.MouseListener;
//import java.awt.event.MouseMotionListener;
//import java.awt.geom.Ellipse2D;
//import java.util.ArrayList;
import javax.swing.JComponent;
public class DynamicShapes extends JComponent{
/**
*
*/
private static final long serialVersionUID = 1L;
MoveShapes move = new MoveShapes();
public DynamicShapes(){
addMouseListener(move);
addMouseMotionListener(move);
}
class MoveShapes extends MouseAdapter{
private int x;
private int y;
boolean pressed;
boolean dragged;
DrawingPanel d = new DrawingPanel();
@Override
public void mousePressed(MouseEvent e){
super.mousePressed(e);
pressed = false;
for (ShapeItem s : d.getShapes()){
if(s.getShape().contains(e.getX() , e.getY()) ){
pressed = true;
System.out.println("shape is pressed");
}
}
}
@Override
public void mouseDragged(MouseEvent e){
super.mouseDragged(e);
if(pressed){
int dx = e.getX()-x;
int dy = e.getY()-y;
for (ShapeItem s : d.getShapes()){
Rectangle rect = s.getShape().getBounds();
if(s.getShape().getBounds2D().contains(x, y)){
rect.x += dx;
rect.y += dy;
repaint();
}
x += dx;
y += dy;
}
}
}
}
}
如果有人能帮忙的话,我对孔图形和鼠标事件没有太多的了解,因为这是我第一次:问题出在哪里?你说你的代码应该可以正常工作,那么你为什么在这里问问题呢?移动代码应该是有效的,但它对孔项目不起作用:到底什么不起作用,或者你能观察到哪些效果?当我选择一个形状并尝试移动它时,它不会移动。我不知道它是否来自代码,或者缺少什么