gpt4 book ai didi

java - 如何在java中的jPanel中绘图时删除所有线条?

转载 作者:行者123 更新时间:2023-12-01 22:33:09 25 4
gpt4 key购买 nike

我正在尝试使用 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 SwingPerforming Custom Painting了解更多详情

另请查看this example一个想法

关于java - 如何在java中的jPanel中绘图时删除所有线条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27303170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com