我想使用java制作Paint程序,我在jPanel中有三个事件来绘制我的线。 我的问题是,当我绘制新的线,第一个被删除(我认为在拖动的事件中的问题!)..等等。 注意,当鼠标拖动线路将被stucked鼠标 这里是我的事件代码:如何在java中使用jPanel绘图时删除所有行?
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方法的第一行应*总是*是'super.paintComponent方法(克);'。 – VGR 2014-12-04 20:33:26
如果使用'BufferedImage',我们可以将它显示在'JLabel'中,并在图像更新时调用'repaint()'。无需扩展'JPanel'。如果**使用**'paintComponent(Graphics)'然后'g.drawImage(mImg,0,0,null);''最好是'g.drawImage(mImg,0,0,this);' – 2014-12-05 00:44:20