当我在程序中绘制线条时,位置是完美的,但是当我使用相同的坐标作为正方形或椭圆形时,它们就会偏离标记。我的代码是:
g2d.drawRect(one1, one2, two1, two2);
g2d.drawOval(one1, one2, two1, two2);
积分是:
one1 = (int)e.getX();
one2 = (int)e.getY();
这是question I previously asked的后续内容。
答案 0 :(得分:3)
好吧,我得到了你的问题。如果您看到下图,则椭圆和sqaure采用的参数与线的不同。
画一条线 - >您必须指定起点和终点。只是将它们直接传递给Graphics对象就可以完成这项工作。然而对于Square或Oval来说,它是不同的。您首先单击将获取一个点,然后您应该对第二次单击时应该输出的内容进行一些操作。第二次单击不应被视为直接进入drawOval()或drawRect()方法的坐标。
因为这些方法的参数是
x, y, width, height
而你正在
x1, y1 and x2, y2
package sof;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class DrawTest {
public static void main(String[] args) {
JFrame frame = new JFrame("Draw Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new MyComponent());
frame.setSize(260, 280);
frame.setVisible(true);
}
}
class MyComponent extends JComponent {
public void paint(Graphics g) {
int height = 120;
int width = 120;
g.setColor(Color.black);
g.drawOval(60, 60, width, height);
g.drawRect(60, 60, width, height);
g.drawLine(0,0,50,50);
}
}
答案 1 :(得分:1)
我想我明白你的问题是什么。您让用户在画布上的两个不同位置单击,然后您想使用这些点绘制矩形/椭圆。因此,如果用户点击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);
根据我对你问题的理解,这应该适合你。
答案 2 :(得分:0)
我的猜测是你正在捕捉X&amp;容器的Y坐标(比如200,200)然后在NEW容器中创建椭圆/ rect;你在评论中陈述了JLabel。
如果您正在捕捉X&amp;对于JPanel,Y为200,200,然后创建JLabel并为组件分配X / Y为200,200,它是新组件中的坐标,而不是捕获X / Y的父级。
您是否可以发布启动MouseListener的代码以及创建JLabel的时间,如果这是错误的?正如其他人所说,我们需要更多的代码来工作。一个图像示例同样有益!