JPanel
に複数の線を描画しようとしています。私のコードでは、各行をArrayList
に追加してから、forループを繰り返して各行を描画します。しかし、私は代わりに、この奇妙な出力を取得します。JPanelで複数の線を描画する際のエラー
これは私のコードです:
public class DrawPanel extends JPanel {
/** Generated serial ID for the program. */
private static final long serialVersionUID = 1697489704611349844L;
/** The width of the panel. */
private static final int WIDTH = 600;
/** The height of the panel. */
private static final int HEIGHT = 300;
/** The stroke width in pixels. */
private static final int STROKE_WIDTH = 1;
/** x-coordinate when mouse is first clicked. */
private int myX;
/** y-coordinate when mouse is first clicked. */
private int myY;
/** x-coordinate when mouse is clicked for a second time. */
private int myXEnd;
/** y-coordinate when mouse clicked for a second time. */
private int myYEnd;
/** ArrayList of lines drawn. */
private List<Line2D> myLines = new ArrayList<Line2D>();
/** ArrayList of coordinates to draw with a pencil. */
private List<MouseEvent> myPoints = new ArrayList<MouseEvent>();
/**
* Constructs a new ellipse panel.
*/
public DrawPanel() {
super();
setBackground(Color.WHITE);
setPreferredSize(new Dimension(WIDTH, HEIGHT));
addMouseListener(myMouseHandler);
addMouseMotionListener(myMouseMotionHandler);
setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
}
/**
* MouseMotionListener for drawing a shape.
*/
private final MouseMotionListener myMouseMotionHandler = new MouseMotionAdapter() {
@Override
public void mouseDragged(final MouseEvent theEvent) {
myXEnd = theEvent.getX();
myYEnd = theEvent.getY();
myPoints.add(theEvent);
repaint();
}
// @Override
// public void mouseMoved(MouseEvent e) {
// }
};
/**
* MouseListener for drawing a shape.
*/
private final MouseListener myMouseHandler = new MouseAdapter() {
@Override
public void mousePressed(final MouseEvent theEvent) {
myX = theEvent.getX();
myY = theEvent.getY();
myXEnd = theEvent.getX();
myYEnd = theEvent.getY();
repaint();
}
@Override
public void mouseReleased(final MouseEvent theEvent) {
myXEnd = theEvent.getX();
myYEnd = theEvent.getY();
myPoints.add(theEvent);
repaint();
}
};
/**
* Draws line with drawLine method.
*/
@Override
public void paintComponent(final Graphics theGraphics) {
super.paintComponent(theGraphics);
final Graphics2D g2d = (Graphics2D) theGraphics;
// for better graphics display
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint(new Color(51, 0, 111));
g2d.setStroke(new BasicStroke(STROKE_WIDTH));
myLines.add(new Line2D.Double(myX, myY, myXEnd, myYEnd));
for (Line2D l : myLines) {
g2d.draw(l);
}
}
}
そして、ここでは、私が円形にカーソルを移動すると、それはパネルに描くものです。それは中心点で接続された一連の線です。しかし、私はそれが複数の別々の行を描くことができるようにしたい。 [
これは、描画したい線のタイプですが、描画されていない線がいくつも消えています。したがって、私はArrayListを実装して、パネル上にそれらを保持するために線を再描画するのはなぜですか?
[
何が起こると思われますか?あなたは自由な形の鉛筆の描画をしたいように思えます。 – matt
私はそれが別々の行であることを望みます。私は1行を描くことができますが、もう1つ描くと消えます。私はすべての行がパネル上に存在するようにしたいと思います。 – Jasmine
「フリーフォーム」の鉛筆画は別々の線ですが、非常に短いです。 – matt