0

我想绘制一条线,最好一次绘制一条虚线。给定两个端点的坐标,我们可以找到直线的方程对吗?因此推断出这条线上的所有点(像素)?但是我在一次绘制一个片段并最终到达第二个端点并擦除之前的片段时遇到了麻烦。看起来我们从 (0,0) 开始向 (5,5) 绘制,在此过程中我们显示段 (0,0)->(1,1) 然后使其消失并显示段 (1, 1)->(2,2) 依此类推,最后只显示 (5,5) 处的像素

public class pracDraw extends JFrame {
    private Color red=Color.red;
    public int i;
    private Color white = Color.white;
        JPanel pr=new JPanel();
        JTextField t=new JTextField();
        JTextField t1=new JTextField();
        JTextField t2=new JTextField();
        JTextArea ta=new JTextArea();
        pracDraw(){
            setTitle("Practise");
            setSize(500,500);
            setVisible(true);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            add(t);
            add(t1);
            add(pr);

        }       
        public void paint(Graphics g){
            g.setColor(Color.BLACK);
            g.drawLine(100, 100, 200, 200);
            Graphics2D g2 = (Graphics2D) g;
                g.setColor(Color.BLUE);
                g.drawLine(200, 200, 350, 375);        
                t.setBounds(390, 370, 10, 10);
                t.setBackground(Color.RED);
                t.setEnabled(false);
                Thread t5=new Thread(){
                    public void run()
                    {
                        for(;;){

                                    int x,y,x1=200,y1=200,x2=400,y2=400,t_x,t_y,slope;
                                    slope=(y2-y1)/(x2-x1); //slope=1
                                    int c=(y1-(slope*x1));  //c=0
                                    for(i=200;i<375;i+=20){
                                        if(i==(slope*i+c)){

                                            t1.setBounds(i,i, 10, 10);
                                            t1.setBackground(Color.RED);
                                            t1.setEnabled(false);



                                            }
                                        try {
                                            sleep(1000);
                                        } catch (InterruptedException e) {
                                            // TODO Auto-generated catch block
                                            e.printStackTrace();
                                        }
                                    }


                    }


                    }
            };

            t5.start();
            if(i>375){
                t5.stop();
                t1.setBackground(Color.GREEN);

            }
                }   



        public static void main(String args[]){
            pracDraw p=new pracDraw();

        }
}
4

0 回答 0