【发布时间】:2019-04-21 14:27:55
【问题描述】:
如何使用 Swing 在 Java 中绘制倒置矩形?
使用 'g.drawRect(x,y,width,height)' 方法, 鼠标拖拽创建矩形成功,但出现了小错误。
如果拖动到比第一个点(x,y)大的点(x2,y2| x2>x1 && y2>y1),它将正常运行。
但是,反之,如果拖动点的坐标小于第一个点击点的坐标,则向相反的方向绘制,而不是向拖动点方向。
即使我试图通过 if() 来反转它,我也不知道该怎么做。
我想要的方向就像Window中的一个拖动框,但是对我来说有点难。 请给我一些提示来克服这次艰难的旅程。
↓这是我的代码
class Rect {
int x, y, w, h;
}
public class Rectangle extends JPanel{
int i = 0;
int x, y = 0;
Rect [] ary = new Rect[100];
public Rectangle() {
addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
if(i>100) return;
ary[i] = new Rect();
ary[i].x = e.getX(); ary[i].y = e.getY();
x= ary[i].x; y = ary[i].y;
}
@Override
public void mouseReleased(MouseEvent e) {
ary[i].w = Math.abs(ary[i].x-e.getX());
ary[i].h = Math.abs(ary[i].y- e.getY());
i++;
repaint();
}
});
addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent e) {
ary[i].w = Math.abs(ary[i].x-e.getX());
ary[i].h = Math.abs(ary[i].y- e.getY());
repaint();
}
public void mouseMoved(MouseEvent e) {
}
});
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
for(Rect r:ary){
if(r !=null) {
g.setColor(Color.BLACK);
g.drawRect(r.x, r.y, r.w, r.h);
}
}
}
}
请帮帮我
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
-
啊..!我会解决的谢谢XD
-
使用帖子下方的edit 按钮对其进行更改。这样可以避免覆盖其他人所做的改进!
-
非常感谢!!感谢您的意见,我可以附上问题的图像并简化代码。
-
“我可以……简化代码” 不,你误解了 MCVE / SSCCE 是什么。需要将代码添加到那里,使其成为 MCVE / SSCCE。例如。导入和主要方法..