我想做一个简单的绘画程序。我正在试图制作一个像铅笔这样的工具,它允许自由绘画。到目前为止,我的代码是:如何在行间填充空格?
NPaintMain
public class NPaintMain {
public static void main(String[] args) {
new NPaintWindow();
}
}
NPaintWindow
public class NPaintWindow {
private JFrame windowFrame;
private String windowTitle;
private NPaintCanvas canvas;
private Container easel;
public NPaintWindow() {
windowTitle = "NPaint - a simple paint program.";
windowFrame = new JFrame(windowTitle);
windowFrame.setDefaultCloseOperation(windowFrame.EXIT_ON_CLOSE);
windowFrame.setSize(500, 500);
windowFrame.setLocationRelativeTo(null);
canvas = new NPaintCanvas();
easel = windowFrame.getContentPane();
easel.add(canvas);
windowFrame.setVisible(true);
}
}
NPaintCanvas
public class NPaintCanvas extends JPanel {
double x, y, px, py;
ArrayList<Line2D> l;
public NPaintCanvas() {
new NPaintMouseEvents(this);
x = y = px = py = 0;
l = new ArrayList<>();
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
for(Line2D ll: l){
g2d.draw(ll);
}
l.add(new Line2D.Double(px, py, x, y));
g.dispose();
repaint();
}
}
个NPaintMouseEvents
public class NPaintMouseEvents implements MouseListener,MouseMotionListener {
NPaintCanvas canvas;
public NPaintMouseEvents(NPaintCanvas canvas) {
this.canvas = canvas;
this.canvas.addMouseMotionListener(this);
this.canvas.addMouseListener(this);
}
@Override
public void mouseDragged(MouseEvent e) {
if(canvas.px == 0 && canvas.py == 0){
canvas.px = e.getX();
canvas.py = e.getY();
}
canvas.x = e.getPoint().x;
canvas.y = e.getPoint().y;
canvas.px = canvas.x;
canvas.py = canvas.y;
}
}
我在这里的主要问题是,在拖动点绘制的,但他们有他们like this之间的空间。我想加入实线。任何帮助进一步的提示将不胜感激。
有许多的方式来实现这一目标。 1)在当前点和最后点之间绘制一个'Line2D'。 2)将所有点添加到一个'GeneralPath'并且每次添加一个新的点时绘制它。顺便说一句:为了更快地提供更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。为此,需要将除main(String [])'类之外的所有类都还原为默认值,并将其放在NPaintMain末尾,然后添加导入。 –
@安德鲁·汤普森我不确定我是否有这个权利。 –
查看编辑的评论..噢,对,我没有(从来没有)密切关注代码,直到有一个MCVE,编译在我的IDE .. –