在java中使用jPanel绘图时,如何删除所有行?
我正在尝试使用java制作一个绘画程序,我在jPanel中有三个事件来画我的线。 我的问题是,当我画新线时,第一条线被删除了(我认为这是拖拽事件中的问题!)。。等等 请注意,当拖动鼠标时,线将被固定到鼠标上 这是我的活动代码:在java中使用jPanel绘图时,如何删除所有行?,java,swing,Java,Swing,我正在尝试使用java制作一个绘画程序,我在jPanel中有三个事件来画我的线。 我的问题是,当我画新线时,第一条线被删除了(我认为这是拖拽事件中的问题!)。。等等 请注意,当拖动鼠标时,线将被固定到鼠标上 这是我的活动代码: private void jPanel1MousePressed(java.awt.event.MouseEvent evt) { g1=(Graphics2D) jPanel1.get
private void jPanel1MousePressed(java.awt.event.MouseEvent evt) {
g1=(Graphics2D) jPanel1.getGraphics();
p1=jPanel1.getMousePosition();
}
JLayer lpane;
private void jPanel1MouseDragged(java.awt.event.MouseEvent evt) {
if(p1!=null){
lpane = new JLayer();
jPanel1.add(lpane, BorderLayout.CENTER);
lpane.setBounds(0, 0, 328, 257);
g2=(Graphics2D) lpane.getGraphics();
l=new Line(p1.x,p1.y,jPanel1.getMousePosition().x,jPanel1.getMousePosition().y);
l.draw(g2);
//lpane.repaint();
lpane.setVisible(false);
lpane.removeAll();
lpane.disable(); jPanel1.remove(lpane);
}
}
private void jPanel1MouseReleased(java.awt.event.MouseEvent evt) {
if(p1!=null)
{
g1=(Graphics2D) jPanel1.getGraphics();
p2=jPanel1.getMousePosition();
l=new Line(p1.x,p1.y,p2.x,p2.y);
g1.setColor(Color.red);
l.draw(g1);
p1=null;
}
}
Graphics2D g1,g2; Point p1=null,p2=null; Line l;
通常的方法是创建一个与组件大小相同的(缓冲)图像,填充背景色,然后在图像上绘制每条新线。在paintComponent方法中,您只需调用g.drawImage(…) 在您的面板中:
public void paintComponent(Graphics g) {
if (mSizeChanged) {
handleResize();
}
g.drawImage(mImg, 0, 0, null);
}
在您的MouseMotionListener中:
public void mouseDragged(MouseEvent me) {
Graphics g = mImg.getGraphics();
Point p = me.getPoint();
g.drawLine(mLastPoint.x, mLastPoint.y, p.x, p.y); }
通常的方法是创建一个与组件大小相同的(缓冲)图像,填充背景色,然后在图像上绘制每条新线。在paintComponent方法中,您只需调用g.drawImage(…) 在您的面板中:
public void paintComponent(Graphics g) {
if (mSizeChanged) {
handleResize();
}
g.drawImage(mImg, 0, 0, null);
}
在您的MouseMotionListener中:
public void mouseDragged(MouseEvent me) {
Graphics g = mImg.getGraphics();
Point p = me.getPoint();
g.drawLine(mLastPoint.x, mLastPoint.y, p.x, p.y); }
通常的方法是创建一个与组件大小相同的(缓冲)图像,填充背景色,然后在图像上绘制每条新线。在paintComponent方法中,您只需调用g.drawImage(…) 在您的面板中:
public void paintComponent(Graphics g) {
if (mSizeChanged) {
handleResize();
}
g.drawImage(mImg, 0, 0, null);
}
在您的MouseMotionListener中:
public void mouseDragged(MouseEvent me) {
Graphics g = mImg.getGraphics();
Point p = me.getPoint();
g.drawLine(mLastPoint.x, mLastPoint.y, p.x, p.y); }
通常的方法是创建一个与组件大小相同的(缓冲)图像,填充背景色,然后在图像上绘制每条新线。在paintComponent方法中,您只需调用g.drawImage(…) 在您的面板中:
public void paintComponent(Graphics g) {
if (mSizeChanged) {
handleResize();
}
g.drawImage(mImg, 0, 0, null);
}
在您的MouseMotionListener中:
public void mouseDragged(MouseEvent me) {
Graphics g = mImg.getGraphics();
Point p = me.getPoint();
g.drawLine(mLastPoint.x, mLastPoint.y, p.x, p.y); }
getGraphics
不是在Swing中绘制的方式,而是覆盖面板paintComponent
并在那里绘制组件状态
paintComponent
方法需要知道无论何时调用它都要绘制什么,因为它可能会被调用任意次数、多次,而无需您的交互或知识
一种方法是建立一个形状或点的列表,然后每次调用paintComponent
时都可以循环绘制。这样做的好处是,您可以根据需要删除这些形状/点
有关详细信息,请参阅和
另请看一个想法getGraphics
不是如何在Swing中进行绘制,而是覆盖面板paintComponent
并在那里绘制组件状态
paintComponent
方法需要知道无论何时调用它都要绘制什么,因为它可能会被调用任意次数、多次,而无需您的交互或知识
一种方法是建立一个形状或点的列表,然后每次调用paintComponent
时都可以循环绘制。这样做的好处是,您可以根据需要删除这些形状/点
有关详细信息,请参阅和
另请看一个想法getGraphics
不是如何在Swing中进行绘制,而是覆盖面板paintComponent
并在那里绘制组件状态
paintComponent
方法需要知道无论何时调用它都要绘制什么,因为它可能会被调用任意次数、多次,而无需您的交互或知识
一种方法是建立一个形状或点的列表,然后每次调用paintComponent
时都可以循环绘制。这样做的好处是,您可以根据需要删除这些形状/点
有关详细信息,请参阅和
另请看一个想法getGraphics
不是如何在Swing中进行绘制,而是覆盖面板paintComponent
并在那里绘制组件状态
paintComponent
方法需要知道无论何时调用它都要绘制什么,因为它可能会被调用任意次数、多次,而无需您的交互或知识
一种方法是建立一个形状或点的列表,然后每次调用paintComponent
时都可以循环绘制。这样做的好处是,您可以根据需要删除这些形状/点
有关详细信息,请参阅和
还要看一看想法paintComponent方法的第一行应该始终是super.paintComponent(g)
。如果使用buffereImage
我们可以在JLabel
中显示它,并在更新图像时调用repaint()
。无需扩展JPanel
。如果使用paintComponent(Graphics)
则g.drawImage(mImg,0,0,null)
最好是g.drawImage(mImg,0,0,this)
paintComponent方法的第一行应该始终是super.paintComponent(g)
。如果使用buffereImage
我们可以在JLabel
中显示它,并在更新图像时调用repaint()
。无需扩展JPanel
。如果使用paintComponent(Graphics)
则g.drawImage(mImg,0,0,null)
最好是g.drawImage(mImg,0,0,this)
paintComponent方法的第一行应该始终是super.paintComponent(g)
。如果使用buffereImage
我们可以在JLabel
中显示它,并在更新图像时调用repaint()
。无需扩展JPanel
。如果使用paintComponent(Graphics)
则g.drawImage(mImg,0,0,null)
最好是g.drawImage(mImg,0,0,this)
paintComponent方法的第一行应该始终是super.paintComponent(g)
。如果使用buffereImage
我们可以在JLabel
中显示它,并在更新图像时调用repaint()
。无需扩展JPanel
。如果使用paintComponent(Graphics)
则g.drawImage(