Java 几何图形:最近的一对点

Java 几何图形:最近的一对点,java,arraylist,mouseevent,points,closest,Java,Arraylist,Mouseevent,Points,Closest,这周我有点困在java作业上了。问题是这样的: 编写一个程序,允许用户单击面板以动态创建点。最初,面板是空的。当面板有两个或更多点时,高亮显示最近点对。每当创建新点时,高亮显示新的最近点对。使用小圆圈显示点,并使用填充cir高亮显示点cles。(提示:将点存储在ArrayList中) 在下面的代码中,我曾尝试创建CircleMouse类的ArrayList,但我不知道这是否是“正确”的方法?另外,当在ArrayList中时,如何显示面板中的圆 import java.awt.*; import

这周我有点困在java作业上了。问题是这样的: 编写一个程序,允许用户单击面板以动态创建点。最初,面板是空的。当面板有两个或更多点时,高亮显示最近点对。每当创建新点时,高亮显示新的最近点对。使用小圆圈显示点,并使用填充cir高亮显示点cles。(提示:将点存储在ArrayList中)

在下面的代码中,我曾尝试创建CircleMouse类的ArrayList,但我不知道这是否是“正确”的方法?另外,当在ArrayList中时,如何显示面板中的圆

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;

import javax.swing.*;

class ClosestPairOfPoints extends JFrame {

  /** FRIE VARIABLER **/
  int x, y;

  /*** ARRAYLIST MED ALLE SIRKLENE ***/
  public ArrayList<CircleMouse> arrCircle = new ArrayList <CircleMouse>();

  public ClosestPairOfPoints() {
    /*** PANEL FOR Å HOLDE PÅ SIRKLENE ***/
    JPanel circlePanel = new JPanel();
    circlePanel.setSize(500, 400);
    circlePanel.setLocation(0, 0);
    circlePanel.setBackground(Color.PINK);

    /*** HENTER CIRCLEMOUSE KLASSEN INN ***/
    CircleMouse circleMouse = new CircleMouse();
    circlePanel.addMouseListener(circleMouse);
    circlePanel.addMouseMotionListener(circleMouse);

    /*** LEGGER PANELET INN I FRAMEN ***/
    add(circlePanel);

}

/*** CIRCLEMOTION KLASSEN ***/
class CircleMouse extends JPanel implements MouseListener, MouseMotionListener {

    public void paintComponent (Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLUE);
        g.drawOval(x, y, 15, 15);
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseMoved(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseClicked(MouseEvent e) {
        x = e.getX();
        y = e.getY();
        repaint();


    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub

    }

}

public static void main(String[] args) {
    ClosestPairOfPoints frame = new ClosestPairOfPoints();
    frame.setTitle("Øving 1 - Oppgave 1: Closest Pair Of Points");
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 400);
    frame.setVisible(true);
}
import java.awt.*;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.awt.event.MouseMotionListener;
导入java.util.ArrayList;
导入javax.swing.*;
类ClosestPairOfPoints扩展了JFrame{
/**弗里变量器**/
int x,y;
/***阿雷利斯梅德阿莱瑟克林酒店***/
public ArrayList arrcycle=new ArrayList();
公共关闭点的配对(){
/***奥霍尔德P奥瑟克伦小组***/
JPanel circlePanel=新的JPanel();
环形面板设置尺寸(500400);
圆环板设置位置(0,0);
圆形板。挫折地面(颜色。粉红色);
/***亨特圆屋克拉森酒店***/
CircleMouse CircleMouse=新CircleMouse();
圆形板。addMouseListener(圆形鼠);
circlePanel.addMouseMotionListener(circleMouse);
/***莱格帕内特一号弗雷蒙酒店***/
添加(circlePanel);
}
/***克拉森环形运动酒店***/
类CircleMouse扩展JPanel实现MouseListener、MouseMotionListener{
公共组件(图形g){
超级组件(g);
g、 setColor(Color.BLUE);
g、 牵引椭圆(x,y,15,15);
}
@凌驾
公共无效鼠标标记(鼠标事件e){
//TODO自动生成的方法存根
}
@凌驾
public void mouseMoved(MouseEvent e){
//TODO自动生成的方法存根
}
@凌驾
公共无效mouseClicked(MouseEvent e){
x=e.getX();
y=e.getY();
重新油漆();
}
@凌驾
公共无效鼠标事件(鼠标事件e){
//TODO自动生成的方法存根
}
@凌驾
公共无效mouseExited(MouseEvent e){
//TODO自动生成的方法存根
}
@凌驾
公共无效鼠标按下(MouseEvent e){
//TODO自动生成的方法存根
}
@凌驾
公共无效MouseEvent(MouseEvent e){
//TODO自动生成的方法存根
}
}
公共静态void main(字符串[]args){
ClosestPairOfPoints框架=新的ClosestPairOfPoints();
frame.setTitle(“Øving 1-opp1:最近的点对”);
frame.setLocationRelativeTo(空);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。设置尺寸(500400);
frame.setVisible(true);
}
}

我试着做一个CircleMouse类的ArrayList

听起来不太对。您应该有一个
点的
数组列表
。每次调用
mouseClicked
时,您应该将
MouseEvent
中的
点添加到它,然后您的
paintComponent
方法应该迭代此列表并绘制“点”

例如


我觉得这更正确。你有什么例子或参考资料吗?我会更深入地研究代码,看看是否有什么进展。谢谢你的建议!