我一直在研究Java2D教程,并想知道如何使用鼠标绘制形状来定义其大小(即形状的大小不固定)。我还没有专门针对这个教程,并且想知道如何为矩形实现这个例子。
答案 0 :(得分:1)
基本上,尺寸每时每刻都是固定的。当您添加MouseMotionListener
时,在捕获下一个事件之前,您可以在屏幕上绘制形状,其大小取决于当前MouseEvent.getPoint()
,它会告诉您鼠标位置的坐标。
覆盖组件的paintComponent(Graphics g)
方法。每次更新鼠标位置和形状大小后调用repaint()
方法:
class YourPanel extends JPanel extends MouseMotionListener, MouseListener {
private Rectangle rect = new Rectangle();
public YourPanel () {
addMouseListener(this);
addMouseMotionListener(this);
}
@Override
public void paintComponent (Graphics g) {
super.paintComponent(g);
g.draw(rect);
}
@Override
public void mouseDragged (MouseEvent me) {
rect.setSize(me.getX() - rect.x, me.getY() - rect.y);
repaint();
}
@Override
public void mousePressed (MouseEvent me) {
rect.setLocation(me.getX(), me.getY());
repaint();
}
// Other methods...
}
答案 1 :(得分:0)
Shapes是一个单词和java类,表示不同的几何图形,如矩形,椭圆,多边形线等。
因此,首先用户必须决定哪种形状,例如多边形线
然后,您将捕获鼠标左键单击事件,并且对于每次单击,读取鼠标坐标并将该坐标对(例如java.awt.geom.Point2D())添加到ArrayList<Point2D>
。
这样一个列表的大小(实际上)是无界的。
每次点击,你将创建一个当前形状的对象,将被绘制。用户单击鼠标右键后,即可将形状准备好并将其存储在形状列表中。
答案 2 :(得分:0)
您应该让您的类实现鼠标侦听器,然后使用getX和getY保存鼠标侦听器的变量以绘制形状。