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

标签 java swing

我正在尝试使用 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/

相关文章:

c# - 访问 `this` : invalid in C#, 的字段初始值设定项在 Java 中有效吗?

java - 从安全服务检索 WSDL 文件

java - 使用docker和java spring时keycloak认证问题

java - 我应该将 swing 元素分配/创建到 EDT 中吗?

java - JMapViewer,绘制到OSM并避免两次调用MouseClick事件

java - ComponentView 在顶部有不必要的额外插入

java - 打印 JList 的所有内容作为输出

java - 将文件中的 WINDOWS-1252 编码文本显示为 html

java - 由于 sql 错误 java.sql.SQLException : Invalid value for getInt()?,无法从我的表中获取数据

java - 在 Java 中创建未定义数量的 Jlabel