简单草图的代码效果不佳
code for simple sketching doesnot work well
我是 java 和 java 图形方面的新手。我写了一个简单的草图代码,但效果不佳。当我快速拖动鼠标时,一些像素会丢失。这是我的代码..
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);;
}
}
主要class..
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);
}
}
谁能告诉我哪里出了问题。请建议我。提前致谢。
x2=e.getX();
y2=e.getY();
repaint();
x1=x2;
y1=y2;
x1 和 x2 将是 same,无论您在哪里调用 repaint()
-- 不是很有用。
而是在获取鼠标位置之前执行分配。
x1=x2;
y1=y2;
x2=e.getX();
y2=e.getY();
repaint();
如果要绘制所有点,则创建一个 ArrayList<Point>
,添加到鼠标运动侦听器中的列表,并在 paintComponent 中遍历列表。
还有:
paintComponent
应该被保护,而不是public。
- 您必须在您自己的覆盖中调用超级的
paintComponent
方法。
- 请看this example。
编辑
您的评论:
My application can draw like paint...so when drag mouse every time start and end coordinate will change
那么您有两个选择:使用 ArrayList<ArrayList<Point>>
或在 BufferedImage 上绘图并在您的 paintComponent 方法中显示 BufferedImage。
我是 java 和 java 图形方面的新手。我写了一个简单的草图代码,但效果不佳。当我快速拖动鼠标时,一些像素会丢失。这是我的代码..
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);;
}
}
主要class..
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);
}
}
谁能告诉我哪里出了问题。请建议我。提前致谢。
x2=e.getX();
y2=e.getY();
repaint();
x1=x2;
y1=y2;
x1 和 x2 将是 same,无论您在哪里调用 repaint()
-- 不是很有用。
而是在获取鼠标位置之前执行分配。
x1=x2;
y1=y2;
x2=e.getX();
y2=e.getY();
repaint();
如果要绘制所有点,则创建一个 ArrayList<Point>
,添加到鼠标运动侦听器中的列表,并在 paintComponent 中遍历列表。
还有:
paintComponent
应该被保护,而不是public。- 您必须在您自己的覆盖中调用超级的
paintComponent
方法。 - 请看this example。
编辑
您的评论:
My application can draw like paint...so when drag mouse every time start and end coordinate will change
那么您有两个选择:使用 ArrayList<ArrayList<Point>>
或在 BufferedImage 上绘图并在您的 paintComponent 方法中显示 BufferedImage。