【问题标题】:Geometry: Closest Pair of Points几何:最接近的点对
【发布时间】:2016-03-16 05:15:16
【问题描述】:

这周我的 Java 作业有点卡住了。问题听起来像这样: “编写一个程序,让用户单击面板以动态创建点。最初,面板是空的。当面板有两个或多个点时,突出显示最近的一对点。每当创建一个新点时,就会有一个新点对最近的点被突出显示。用小圆圈显示这些点,并用实心圆圈突出显示这些点。(提示:将点存储在 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);
}

}

【问题讨论】:

    标签: java arraylist mouseevent points closest


    【解决方案1】:

    我试图创建一个 CircleMouse 类的 ArrayList

    听起来不太对劲。您应该有一个 ArrayListPoint。每次调用mouseClicked 时,您应该将MouseEvent 中的Point 添加到其中,然后是您的paintComponent 方法,您应该遍历此列表并绘制“点”

    例如...

    【讨论】:

    • 这对我来说听起来更正确。你有任何例子或参考资料吗?我将更多地研究代码,看看我是否能找到它。谢谢你的建议!
    猜你喜欢
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2012-08-21
    • 2018-11-02
    相关资源
    最近更新 更多