Java 按点找线

Java 按点找线,java,Java,我仍然有麻烦,我想给你看我的代码。如果你能运行它,那就太好了。这有点复杂。也许当你看到这一切,你可能会发现另一个错误,导致找到错误的行。仍然给出最后一行作为最近的一行。另一个问题是,当你在创建一条直线后运行程序时,jmenu会复制它自己,但我可以在第二条jmenu上画一条直线。我相信这与我的编码无关。你能看一下我的密码吗。谢谢你以前的回答。很抱歉我的帖子,这是我第一次问问题 import java.awt.Color; import java.awt.Point; public

我仍然有麻烦,我想给你看我的代码。如果你能运行它,那就太好了。这有点复杂。也许当你看到这一切,你可能会发现另一个错误,导致找到错误的行。仍然给出最后一行作为最近的一行。另一个问题是,当你在创建一条直线后运行程序时,jmenu会复制它自己,但我可以在第二条jmenu上画一条直线。我相信这与我的编码无关。你能看一下我的密码吗。谢谢你以前的回答。很抱歉我的帖子,这是我第一次问问题

  import java.awt.Color;
  import java.awt.Point;

   public class Lines {

public int id;
public Point point1;
public Point point2;
public int[] denklem;
}

头等舱到此结束

   import javax.swing.*;
   import java.awt.*;
   import java.awt.event.*;
   import java.util.ArrayList;
   import java.util.Collections;
   import java.util.Iterator;


  public class Tester{

public Tester() {
    cizer test = new cizer();
    JFrame frame = new JFrame();
//  frame.setBackground(Color.DARK_GRAY);
    frame.setJMenuBar(test.jmb);
    frame.add(test.statusBar, BorderLayout.SOUTH );
    Container  c = frame.getContentPane();
    c.add(test);
    c.setSize(700, 700);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(700,700);
    frame.setVisible(true);
}
public static void main(String[] args) {
    Tester a = new Tester();
}
  }
   class cizer extends JPanel implements MouseMotionListener, MouseListener {

int mouseclicks = 0;
boolean begin = true;
boolean linesegmentci = false;
boolean lineci = false;
boolean chooser = false;
boolean deleter = false;
boolean digerinde = false;
ArrayList<Lines> array = new ArrayList<Lines>();
ArrayList<Lines> array3 = new ArrayList<Lines>();
Devline devarray = new Devline();
ArrayList<Devline> devarray2 = new ArrayList<Devline>();
JMenuBar jmb = new JMenuBar();
JMenu menu = new JMenu("Secenekler");
JMenu menu2 = new JMenu("Renk");
JMenu menu3 = new JMenu("Kalınlık");
JMenu menu4 = new JMenu("Sec");
JMenuItem item = new JMenuItem("Linesegments drawer");
JMenuItem item2 = new JMenuItem("Line drawer");
JMenuItem item3 = new JMenuItem("Black");
JMenuItem item4 = new JMenuItem("Blue");
JMenuItem item5 = new JMenuItem("Red");
JMenuItem item6 = new JMenuItem("Green");
//JMenuItem item13 = new JMenuItem("Hepsinin rengini degistir");
JMenuItem item7 = new JMenuItem("3");
JMenuItem item8 = new JMenuItem("5");
JMenuItem item9 = new JMenuItem("7");
JMenuItem item10 = new JMenuItem("10");
JMenuItem item11 = new JMenuItem("Find Closest line");
//JMenuItem item12 = new JMenuItem("Sil");
JLabel statusBar = new JLabel( "Mouse outside JPanel" );
Lines l1 = new Lines();
int minValue = Integer.MAX_VALUE;
Lines min = null;
ArrayList<Integer> minimum = new ArrayList<Integer>();
Graphics2D g2D;
Color color;
BasicStroke stroke;
int minx = 0;
boolean deneme = false;
public cizer(){
    menu.add(item);
    menu.add(item2);
    menu2.add(item3);
    menu2.add(item4);
    menu2.add(item5);
    menu2.add(item6);
//  menu2.add(item13);
    menu3.add(item7);
    menu3.add(item8);
    menu3.add(item9);
    menu3.add(item10);
    menu4.add(item11);
//  menu.add(item12);
    jmb.add(menu);
    jmb.add(menu2);
    jmb.add(menu3);
    jmb.add(menu4);
    l1.point1 = new Point();
    l1.point2 = new Point();
//  min.point1 = new Point();
//  min.point2 = new Point();
    l1.denklem = new int[3];
    stroke = new BasicStroke();


    item.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) { 
            linesegmentci = true;
            lineci = false;
            chooser = false;
            deleter = false;
        }
    });
    item2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) { 
            begin = true;
            lineci = true;
            linesegmentci = false;
            chooser = false;
            deleter = false;
        }
    });
    item3.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) { 
            color = Color.BLACK;


        }
    });
    item4.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) { 
            color = Color.BLUE;

        }
    });
    item5.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) { 
            color = Color.RED;

        }
    });
    item6.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) { 
            color = Color.GREEN;

        }
    });
    item7.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) { 
            stroke = new BasicStroke(3.f);


        }
    });
    item8.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) { 
            stroke = new BasicStroke(5.f);

        }
    });
    item9.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) { 
            stroke = new BasicStroke(7.f);

        }
    });
    item10.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) { 
            stroke = new BasicStroke(10.f);

        }
    });
    item11.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) { 
            chooser = true;
            linesegmentci = false;
            lineci = false;
            deleter = false;

        }
    });
/*  item12.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) { 
            deleter = true;
            chooser = false;

        }
    });*/
/*  item13.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) { 
            deneme = true;
        }
    });*/
    addMouseListener(this);
    addMouseMotionListener(this);

}

public void paint(Graphics g) {

    g2D = (Graphics2D) g;
    devarray.segmentim.add(l1);

    if(linesegmentci == true){
        Iterator<Lines> itr = devarray.segmentim.iterator();
            while(itr.hasNext()){
                Lines l = itr.next();
                g.setColor(color);
                g2D.setStroke(stroke);
                g2D.drawLine(l.point1.x,l.point1.y,l.point2.x,l.point2.y);


            }
            devarray2.add(devarray);

    }
    else if(lineci == true){
        array3.add(l1);
        g2D.setPaint(color);
        g2D.setStroke(stroke);
        g2D.drawLine(l1.point1.x,l1.point1.y,l1.point2.x,l1.point2.y);
    }
}
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) { }
public void mouseClicked(MouseEvent e) {
    if(chooser == true){
        Iterator<Lines> itr2 = array.iterator();
        while(itr2.hasNext()){
            Lines l2 = itr2.next();
            minx = (int) (Math.abs((l2.denklem[0] * e.getX()) + (l2.denklem[1] * e.getY()) +
                    l2.denklem[2]) / (Math.sqrt((l2.denklem[0] *l2.denklem[0]) + (l2.denklem[1] * l2.denklem[1]) )));

             if (minx < minValue){
                   minValue = minx;
                   min = l2;
               }
        }
        System.out.println("CLOSEST LINE COORDINATES");
        System.out.println(min.point1.x);
        System.out.println(min.point1.y);
    }
    else if(linesegmentci == true){

        if(begin == true){
            if(mouseclicks == 0){
                l1.point1.x = e.getX();
                l1.point1.y = e.getY();

                statusBar.setText( String.format( "Clicked at [%d, %d]", 
                        e.getX(), e.getY() ) );

                mouseclicks++;
            }
            else if(mouseclicks == 1){
                l1.point2.x = e.getX();
                l1.point2.y = e.getY();
                statusBar.setText( String.format( "Clicked at [%d, %d]", 
                        e.getX(), e.getY() ) );
                mouseclicks = 0;
                begin = false;
                repaint();

            }
            //  array2.devarray.add(l1);
            array.add(l1);
            int a = l1.point1.y - l1.point2.y;
            int b = l1.point2.x - l1.point1.x;
            int c = (l1.point1.x * l1.point2.y) - (l1.point2.x * l1.point1.y);
            l1.denklem[0] = a;
            l1.denklem[1] = b;
            l1.denklem[2] = c;
        }
        else{
            l1.point1.x = l1.point2.x;
            l1.point1.y = l1.point2.y;
            l1.point2.x = e.getX();
            l1.point2.y = e.getY();
            statusBar.setText( String.format( "Clicked at [%d, %d]", 
                    e.getX(), e.getY() ) );
            repaint();
            //  array2.devarray.add(l1);
            array.add(l1);
            int a = l1.point1.y - l1.point2.y;
            int b = l1.point2.x - l1.point1.x;
            int c = (l1.point1.x * l1.point2.y) - (l1.point2.x * l1.point1.y);
            l1.denklem[0] = a;
            l1.denklem[1] = b;
            l1.denklem[2] = c;
        }
    }
    else if(lineci == true){

        if(mouseclicks == 0){
            l1.point1.x = e.getX();
            l1.point1.y = e.getY();
            statusBar.setText( String.format( "Clicked at [%d, %d]", 
                    e.getX(), e.getY() ) );
            mouseclicks++;
        }
        else if(mouseclicks == 1){
            l1.point2.x = e.getX();
            l1.point2.y = e.getY();
            statusBar.setText( String.format( "Clicked at [%d, %d]", 
                    e.getX(), e.getY() ) );
            mouseclicks = 0;
        //  begin = false;
            repaint();

        }
        array.add(l1);
        int a = l1.point1.y - l1.point2.y;
        int b = l1.point2.x - l1.point1.x;
        int c = (l1.point1.x * l1.point2.y) - (l1.point2.x * l1.point1.y);
        l1.denklem[0] = a;
        l1.denklem[1] = b;
        l1.denklem[2] = c;

    }
}

public void mouseMoved(MouseEvent e) { }
public void mouseDragged(MouseEvent e) {}
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.Iterator;
公共类测试员{
公共测试人员(){
cizer测试=新cizer();
JFrame=新JFrame();
//框架。背景(颜色。深灰色);
frame.setJMenuBar(test.jmb);
frame.add(test.statusBar,BorderLayout.SOUTH);
容器c=frame.getContentPane();
c、 添加(测试);
c、 设置大小(700700);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架设置尺寸(700700);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
测试仪a=新测试仪();
}
}
类cizer扩展JPanel实现MouseMotionListener、MouseListener{
int mouseclicks=0;
布尔开始=真;
布尔linesegmentci=false;
布尔lineci=false;
布尔选择器=false;
布尔deleter=false;
布尔Digeride=false;
ArrayList数组=新的ArrayList();
ArrayList array3=新的ArrayList();
Devline devarray=新的Devline();
ArrayList devarray2=新的ArrayList();
JMenuBar jmb=新JMenuBar();
JMenu菜单=新JMenu(“Secenekler”);
JMenu菜单2=新JMenu(“Renk”);
JMenu menu3=新JMenu(“Kalınlık”);
JMenu菜单4=新JMenu(“Sec”);
JMenuItem项目=新JMenuItem(“线段抽屉”);
jMenuItem2=新的JMenuItem(“行抽屉”);
jMenuItem3=新的JMenuItem(“黑色”);
jMenuItem4=新的JMenuItem(“蓝色”);
JMenuItem item5=新的JMenuItem(“红色”);
jMenuItem6=新的JMenuItem(“绿色”);
//jMenuItem13=新的JMenuItem(“Hepsinin rengini degistir”);
jMenuItem7=新的JMenuItem(“3”);
jMenuItem8=新的JMenuItem(“5”);
jMenuItem9=新的JMenuItem(“7”);
jMenuItem10=新的JMenuItem(“10”);
jMenuItem11=新的JMenuItem(“查找最近的行”);
//jMenuItem12=新的JMenuItem(“Sil”);
JLabel statusBar=新的JLabel(“鼠标在JPanel外”);
l1行=新行();
int minValue=Integer.MAX_值;
行min=null;
ArrayList最小值=新的ArrayList();
图形2d-g2D;
颜色;
基础中风;
int minx=0;
布尔密度=假;
公共cizer(){
菜单。添加(项目);
菜单。添加(第2项);
菜单2.添加(第3项);
菜单2.添加(第4项);
菜单2.添加(第5项);
菜单2.添加(第6项);
//菜单2.添加(第13项);
菜单3.添加(第7项);
菜单3.添加(第8项);
菜单3.添加(第9项);
菜单3.添加(第10项);
菜单4.添加(第11项);
//菜单。添加(第12项);
添加(菜单);
jmb.add(menu2);
jmb.add(menu3);
jmb.add(menu4);
l1.point1=新点();
l1.point2=新点();
//min.point1=新点();
//min.point2=新点();
l1.denklem=新整数[3];
行程=新的基本行程();
item.addActionListener(新ActionListener(){
已执行公共无效操作(操作事件arg0){
linesegmentci=true;
lineci=false;
chooser=false;
deleter=false;
}
});
item2.addActionListener(新ActionListener(){
已执行公共无效操作(操作事件arg0){
开始=真;
lineci=true;
linesegmentci=false;
chooser=false;
deleter=false;
}
});
item3.addActionListener(新ActionListener(){
已执行公共无效操作(操作事件arg0){
颜色=颜色。黑色;
}
});
item4.addActionListener(新ActionListener(){
已执行公共无效操作(操作事件arg0){
颜色=颜色。蓝色;
}
});
item5.addActionListener(新ActionListener(){
已执行公共无效操作(操作事件arg0){
颜色=颜色。红色;
}
});
item6.addActionListener(新ActionListener(){
已执行公共无效操作(操作事件arg0){
颜色=颜色。绿色;
}
});
item7.addActionListener(新ActionListener(){
已执行公共无效操作(操作事件arg0){
行程=新的基本行程(3.f);
}
});
item8.addActionListener(新ActionListener(){
已执行公共无效操作(操作事件arg0){
冲程=新的基本冲程(5.f);
}
});
item9.addActionListener(新ActionListener(){
已执行公共无效操作(操作事件arg0){
冲程=新的基本冲程(7.f);
}
});
item10.addActionListener(新ActionListener(){
已执行公共无效操作(操作事件arg0){
冲程=新的基本冲程(10.f);
}
});
item11.addActionListener(新ActionListener(){
已执行公共无效操作(操作事件arg0){
chooser=true;
linesegmentci=false;
lineci=false;
deleter=false;
}
});
/*item12.addActionListener(新ActionListener(){
已执行公共无效操作(操作事件arg0){
deleter=true;
chooser=false;
}
});*/
/*item13.addActionListener(新ActionListener(){
已执行公共无效操作(操作事件arg0){
deneme=真;
}
});*/
addMouseListener(这个);
addMouseMotionListener(此);
}
公共空间涂料(图g){
g2D=(图2d)g;
devarray.segmentim.add(l1);
如果(linesegmentci==true){
迭代器itr=devarray.segmentim.Iterator();
while(itr.hasNext()
   import java.util.ArrayList;


  public class Devline {
ArrayList<Lines> segmentim = new ArrayList<Lines>();

   }
  Lines min = null;
  double minDist = Double.MAX_VALUE;
  for (Lines l : array) {
    double dist = ...; // compute the distance from the point to `l'
    if (dist < minDist) {
      minDist = dist;
      min = l;
    }
  }
int minValue = Integer.MAX_VALUE;
Lines min = null;

Iterator<Lines> itr2 = array.iterator();
while(itr2.hasNext()){
   Lines l2 = itr2.next();
   minx = (int) (Math.abs((l2.denklem[0] * e.getX()) + (l2.denklem[1] * e.getY()) +
                l2.denklem[2]) / (Math.sqrt((l2.denklem[0] *l2.denklem[0]) + (l2.denklem[1] * l2.denklem[1]) )));
   if (minx < minValue){
       minValue = minx;
       min = l2;
   }
 }