我是java的新手,也是java Graphics的新手。我写了一个简单的草图代码,但效果不佳。当我快速拖动鼠标时,会遗漏一些像素。这是我的代码..
package test;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
public class testdraw extends JPanel{
public int x1;
public int y1;
public int x2;
public int y2;
public testdraw(){
addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent e){
x2=e.getX();
y2=e.getY();
repaint();
x1=x2;
y1=y2;
}
});
}
public void paintComponent(Graphics g){
Graphics2D g2=(Graphics2D)g;
g2.drawLine(this.x1, this.y1,this.x2,this.y2);;
}
}
主要课程..
package test;
import javax.swing.JFrame;
public class testdrawmain {
public static void main(String args[]){
JFrame frame=new JFrame();
testdraw td=new testdraw();
frame.add(td);
frame.setSize(350, 350);
frame.setVisible(true);
}
}
有人可以告诉我有什么问题。请建议我。提前谢谢。
答案 0 :(得分:2)
x2=e.getX();
y2=e.getY();
repaint();
x1=x2;
y1=y2;
x1和x2在此之后将是相同,无论您在何处调用repaint()
- 都不是很有用。
而是在之前获取鼠标位置。
x1=x2;
y1=y2;
x2=e.getX();
y2=e.getY();
repaint();
如果你想绘制所有点,那么创建一个ArrayList<Point>
,添加到鼠标运动监听器的列表中,并在paintComponent中迭代列表。
此外:
paintComponent
应该受到保护,而不是公开。paintComponent
方法。 修改强>
你的评论:
我的应用程序可以像绘画一样绘制......所以当每次拖动鼠标时,开始和结束坐标都会改变
然后你有两个选择:使用ArrayList<ArrayList<Point>>
或绘制BufferedImage并在paintComponent方法中显示BufferedImage。