我正在尝试使用 java 制作一个 Paint 程序,我在 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;
最佳答案
getGraphics
不是在 Swing 中进行绘制的方式,而是重写面板 paintComponent
并在其中绘制组件状态。
paintComponent
方法需要知道每次调用时要绘制什么,因为它可能会被调用任意多次,很多次都不需要您的交互或知识。
一种方法是构建形状或点的List
,然后可以在每次调用paintComponent
时对其进行循环和绘制。这样做的好处是您可以根据需要删除这些形状/点。
参见Pinting in AWT and Swing和 Performing Custom Painting了解更多详情
另请查看this example一个想法
关于java - 如何在java中的jPanel中绘图时删除所有线条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27303170/