私は簡単なペイントプログラムを作ろうとしています。私はフリーの描画を可能にする鉛筆のようなツールを作ろうとしています。これまでのところ、私のコードは次のとおりです。行間のスペースを埋める方法は?
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」に追加し、新しい点が追加されるたびに描画します。 BTW:すぐに役立つように、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。この場合、 'main(String [])'クラスを除くすべてのクラスをデフォルトにして、 'NPaintMain'の最後にそれらを残してから、インポートを追加する必要があります。 –
@AndrewThompson私はそれが正しいと確信していません。 –
編集したコメントを見る..私のIDEでコンパイルされたMCVEがあるまで、ああ、まあ、私はコードをよく見ていませんでした。 –