在给定坐标为2点的JPanel中画一条线

时间:2014-04-26 05:59:32

标签: java plot pixel graphics2d line-segment

我想绘制线条,最好是一次虚线段。给定两个端点的坐标,我们可以找到线的方程对吗?因此推断出这条线上的所有点(像素)?但是我在绘制一个片段并最终到达第二个终点并删除前面的片段时遇到了麻烦。 看起来我们应该从(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();

        }
}

0 个答案:

没有答案