如何在Java中删除绘制的线条?

4

问题是如何删除旧的线条?我的意思是,只让当前的x和y线条出现在屏幕上,使两条线的交点“跟随”鼠标指针。

这是更新后的代码:

import javax.swing.*;
import javax.*;
import java.awt.*;
import java.awt.Color;
import java.awt.Graphics.*;
import java.awt.event.*;
import javax.swing.UIManager;
public class SimpleGUI extends JFrame {
    public SimpleGUI() {
           this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
    }

    public void go() {
        Drawpanel = new Mypanel();
        JFrame frame = new JFrame("Chasing Line");
        JButton mybutton1 = new JButton("Please");
        JButton mybutton2 = new JButton("Help");
        JButton mybutton3 = new JButton("Me!!");
        Drawpanel.add(mybutton1); 
        Drawpanel.add(mybutton2);
        Drawpanel.add(mybutton3);

        frame.getContentPane().add(BorderLayout.CENTER, Drawpanel);
        frame.setSize(300,300);
        frame.setVisible(true);

        Drawpanel.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseMoved(java.awt.event.MouseEvent evt) {
                DrawpanelMouseMoved(evt);
            }
        }); 

    }

    public void DrawpanelMouseMoved(java.awt.event.MouseEvent evt) {
        xpos=evt.getX();
        ypos=evt.getY();
        System.out.println("Coordinates : X :"+ xpos+"Y: "+ypos);
        Drawpanel.paintImage(xpos,ypos);
    } 

    class Mypanel extends JPanel {
        public void paintImage(int xpost,int ypost){
            Graphics d = getGraphics();
            d.clearRect(0,0, this.getWidth(), this.getHeight());
            d.setColor(Color.black);
            d.drawLine(xpost, 0, xpost, this.getHeight());
            d.setColor(Color.red);
            d.drawLine(0, ypost, this.getWidth(),ypost);
            this.validate();
        }

    } // end the inner class 

    public static void main(String[] args){
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } catch(Exception e) {
            System.err.println("Look and feel not set");
        }

        SimpleGUI win = new SimpleGUI();
        win.go();
    }

    Mypanel Drawpanel;
    private int xpos=0;
    private int ypos=0;
}  // close SimpleGUI class

问题是如何保持这三个按钮的状态而不进行更改?

你想清理面板还是只是删除一些行? - marionmaiden
我想要实现的是,使得垂直和水平线都能够跟随鼠标指针移动,而不会留下痕迹。 - Jeyjey
3个回答

7
问题是如何删除旧的线条?即只让当前的x和y线条出现在屏幕上,并使两条线的交点“跟随”鼠标指针。

  • 将要保留的所有线保存在LinkedList或类似结构中。
  • 重新绘制背景来开始绘画,这将清除旧的线条。
  • 绘制LinkedList中的所有线。

或者如果您不想保存任何线:

  1. 再次绘制背景,这将删除旧线。
  2. 绘制您的线条。

你可以用以下方式重新绘制背景:

clearRect(int x, int y, int width, int height)

谢谢您的回答,但我有另一个问题,如果我删除了所有按钮小部件(按钮、文本框或其他),如何保存小部件? - Jeyjey
@Jeyjey:你想做什么?将你的组件添加到其他面板上,而不是正在绘制的那个面板。 - Jonas
@Jonas,当有很多行时,你不觉得这样做会太低效吗? - Madhusoodan P

1

你绝对不能使用调用 getGraphics() 的代码。自定义的绘图应该通过重写 paintComponent() 方法来实现。

自定义绘画方法 展示了两种不同的基本绘画方法。

我不确定我理解你关于“小部件”的问题,但示例中的按钮不会受到绘画的影响。


0

Graphics d = getGraphics();这一行后面加上d.clear();,这将会清除现有的图像,之后你绘制的内容才是显示出来的。


谢谢您的回答,但我有另一个问题,如果我删除了所有按钮小部件(按钮、文本框或其他),如何保留小部件? - Jeyjey
不确定你的意思?你可能想要在绘制的东西周围/上方放置一个单独的Swing小部件,带有按钮? - chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接