我正在尝试在我的JPanel中绘制,但每次单击时,我的JPanel的背景都会消失。它绘制了鼠标所在的一条线。我认为它与2D图形有关 有人可以帮忙吗?
public Brush() {
addMouseListener(this);
addMouseMotionListener(this);
setBackground(Color.white);
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2;
// super.paintComponent(g);
g2 = (Graphics2D) g;
g2.setColor(brushColor);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setStroke(new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
//Ellipse2D.Double circle = new Ellipse2D.Double(p1.x,p1.y,20,20);
g2.fillOval(p1.x,p1.y,20,20);
}
@Override
public void mousePressed(MouseEvent e) {
dragging = true;
p1 = e.getPoint();
repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
dragging = false;
p1 = e.getPoint();
repaint();
}
@Override
public void mouseDragged(MouseEvent e) {
if (dragging) {
p1 = e.getPoint();
repaint();
}
}
答案 0 :(得分:4)
始终在覆盖范围内调用super.paintComponent(g)
方法。
你错了。如果你想绘制一堆椭圆形,那么
ArrayList<Point>
并在paintComponent或BufferedImage中的连续点之间绘制线条。同样,您的代码编写为在paintComponent中仅绘制一个点(实际上是椭圆形)。如果编码正确,就可以做到这一点。
我建议,最简单的事情是:
ArrayList<Point>
paintComponent
中,调用super方法,然后使用for循环遍历ArrayList。ArrayList<ArrayList<Point>>
,每按一次鼠标就会开始一个新的ArrayList<Point>
,每次发布都会完成它并将其添加到整个集合中。这将允许绘制几行。为什么不先自己动手呢?