Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建java swing图形对象来响应鼠标单击?_Java_Swing - Fatal编程技术网

如何创建java swing图形对象来响应鼠标单击?

如何创建java swing图形对象来响应鼠标单击?,java,swing,Java,Swing,我需要在画布的不同位置动态绘制图形元素(正方形),我需要听鼠标的点击来改变正方形的位置。 如何将鼠标侦听器添加到图形对象?我必须使用另一种方法吗 int x = 0; int y = 0; Graphics g = getGraphics(); // get Graphics context g.setColor(Color.red); g.fillRect( x - 25, y - 15, 60, 30 ); g.s

我需要在画布的不同位置动态绘制图形元素(正方形),我需要听鼠标的点击来改变正方形的位置。 如何将鼠标侦听器添加到图形对象?我必须使用另一种方法吗

int x = 0;
int y = 0;
 Graphics g = getGraphics(); // get Graphics context
                  g.setColor(Color.red);
          g.fillRect( x - 25, y - 15, 60, 30 );
          g.setColor(Color.black);
          g.drawRect( x - 25, y - 15, 60, 30 );
                  g.dispose();

我可能会使用JPanel作为构成画布的较大组件的子元素。由于JPanel是JComponent的子类,因此它允许您通过添加鼠标侦听器,并重写其方法

如果要移动正方形,只需重新定位JPanel即可

(就此而言,如果它是正方形或矩形,您甚至不需要重写paintComponent,您只需通过适当调用setboorder和setBackground就可以实现这一点。)



另一种方法是使用JPanel作为整个画布,覆盖paintComponent以绘制任何您喜欢的内容,在JPanel上添加MouseListener,然后手动确定鼠标侦听器事件是否发生在图形元素的几何体中。

我认为第一种方法是最简单的方法。因为不需要进行长时间的计算来确定哪个对象占据画布上的特定位置。我可以用它来添加到画布(父)图形元素(子)如环、椭圆吗?有代码示例吗?我想他的建议只适用于正方形。如果你要画其他东西,你需要坚持第二种方法。