Геометрия: ближайшая пара точек

Я немного застрял на своей домашней работе по java на этой неделе. Задача звучит так: «Напишите программу, которая позволяет пользователю щелкать по панели для динамического создания точек. Изначально панель пуста. Когда на панели две или более точек, подсвечивайте пару ближайших точек. создается, выделяется новая пара ближайших точек. Отобразите точки с помощью маленьких кружков и выделите точки с помощью закрашенных кружков. (Совет: сохраните точки в ArrayList)"

В приведенном ниже коде я попытался создать ArrayList класса CircleMouse, но я не знаю, является ли это «правильным» способом? Кроме того, как отображать круги на панели, когда они находятся в 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);
}

}


person FredrikBakken    schedule 22.01.2014    source источник


Ответы (1)


Я попытался сделать ArrayList класса CircleMouse.

Звучит не совсем правильно. У вас должно быть ArrayList из Point. Каждый раз, когда вызывается mouseClicked, вы должны добавить к нему Point из MouseEvent, затем ваш метод paintComponent, вы должны перебирать этот список и рисовать «точки»

Например...

person MadProgrammer    schedule 22.01.2014
comment
Это звучит более правильно для меня. У вас есть примеры или ссылки? Я посмотрю больше на код и посмотрю, получу ли я что-нибудь с ним. Спасибо за ваше предложение! - person FredrikBakken; 22.01.2014