Java 长方形和椭圆形don';你不知道我把它们放在哪里了吗?

Java 长方形和椭圆形don';你不知道我把它们放在哪里了吗?,java,swing,graphics,drawing,java-2d,Java,Swing,Graphics,Drawing,Java 2d,当我在程序中画线时,位置是完美的,但是当我使用相同的坐标表示正方形或椭圆形时,它们就偏离了目标。我的代码是: g2d.drawRect(one1, one2, two1, two2); g2d.drawOval(one1, one2, two1, two2); 这些点是通过以下方式收集的: one1 = (int)e.getX(); one2 = (int)e.getY(); 这是一篇文章的后续文章 我的猜测是,您正在捕获一个容器(比如200200)的X&Y坐标,然后在一个新容器中创建椭圆/

当我在程序中画线时,位置是完美的,但是当我使用相同的坐标表示正方形或椭圆形时,它们就偏离了目标。我的代码是:

g2d.drawRect(one1, one2, two1, two2);
g2d.drawOval(one1, one2, two1, two2);
这些点是通过以下方式收集的:

one1 = (int)e.getX();
one2 = (int)e.getY();

这是一篇文章的后续文章

我的猜测是,您正在捕获一个容器(比如200200)的X&Y坐标,然后在一个新容器中创建椭圆/矩形;您在评论中声明了上面的JLabel

如果要为JPanel捕获X&Y为200200,则创建JLabel并为组件指定X/Y为200200,它是其新组件内的坐标,而不是捕获X/Y的父级


如果这是错误的,您可以在启动MouseListener的位置以及创建JLabel的时间发布代码吗?正如其他人所说,我们需要更多的代码。一个图像示例同样有益

好吧,我明白你的问题了。如果您看到下图,则oval和sqaure获取的参数与直线不同

要绘制直线-->必须指定起点和终点。只需将它们直接传递给图形对象就可以了。然而,对于正方形或椭圆形,则不同。第一次单击将获取一个点,然后在第二次单击时应对输出内容进行一些操作。第二次单击不应被视为直接进入drawOval()或drawRect()方法的坐标

因为这些方法的参数是

x, y, width, height
而你正在

x1, y1  and x2, y2


我想我明白你的问题是什么。您让用户在画布上单击两个不同的点,然后您希望使用这些点绘制一个矩形/椭圆形。因此,如果用户单击10,10,然后单击20,20,那么您需要一个左上角位于10,10,右下角位于20,20的矩形

如果这确实是您所问的问题,那么以下是我建议的解决方案:

Event e1 = (the first click)
Event e2 = (the second click)

// Figure out where the user clicked
int x1 = (int)e1.getX();
int y1 = (int)e1.getY();

int x2 = (int)e2.getX();
int y2 = (int)e2.getY();

int xCoord;
int yCoord;

// Figure out the coordinates
if(x1 < x2)
    xCoord = x1;
else
    xCoord = x2;

if(y1 < y2)
    yCoord = y1;
else
    yCoord = y2;

// Figure out the size of the object
int width = Math.abs(x1 - x2);
int height = Math.abs(y1 - y2);

// Finally draw your objects
g2d.drawRect(xCoord, yCoord, width, height);
g2d.drawOval(xCoord, yCoord, width, height);
Event e1=(第一次单击)
事件e2=(第二次单击)
//找出用户单击的位置
intx1=(int)e1.getX();
inty1=(int)e1.getY();
intx2=(int)e2.getX();
inty2=(int)e2.getY();
int xCoord;
国际协调;
//算出坐标
if(x1

基于我对你问题的理解,这应该对你有用。

An在这里会有很大帮助。否则我们就玩“猜猜我的代码里有什么”的游戏,这是一个我们大多数人都玩得不好的游戏。你能告诉我们你的期望是什么吗?给我们更多的关于你想要什么和你得到什么的想法。没什么好说的,我用鼠标听器抓取第一次点击,然后第二次,第一次点击x和y时,这些被分配为one1 one2,第二次点击时也一样。单击两次后,它运行该代码行以绘制矩形或椭圆形,并在JLabel中绘制。我希望我的程序能小一点,我能把它全部展示出来,但是它太大了。这个特殊的元素很小。任何关于什么会导致坐标适合直线而不适合正方形或椭圆形的一般想法都将不胜感激。我建议阅读您使用的方法的文档,以便您了解它们的作用。我不明白这是怎么回事,我已经展示了我认为相关的内容,人们已经能够指出错误所在。完成了。这是我犯的第一个错误,但不是这个错误的原因,谢谢你@埃里克班德赫德:很乐意帮忙!谢谢Treebranch,很抱歉我不能将两个答案标记为正确,因为这和标记的答案一样有用。
Event e1 = (the first click)
Event e2 = (the second click)

// Figure out where the user clicked
int x1 = (int)e1.getX();
int y1 = (int)e1.getY();

int x2 = (int)e2.getX();
int y2 = (int)e2.getY();

int xCoord;
int yCoord;

// Figure out the coordinates
if(x1 < x2)
    xCoord = x1;
else
    xCoord = x2;

if(y1 < y2)
    yCoord = y1;
else
    yCoord = y2;

// Figure out the size of the object
int width = Math.abs(x1 - x2);
int height = Math.abs(y1 - y2);

// Finally draw your objects
g2d.drawRect(xCoord, yCoord, width, height);
g2d.drawOval(xCoord, yCoord, width, height);