2014-01-22 4 views
0

Я немного застрял на своей домашней работе в 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); 
} 

}

ответ

0

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

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

Для примеров ...

+0

Это звучит более правильно для меня. У вас есть примеры или ссылки? Я больше посмотрю на код и посмотрю, смогу ли я где-нибудь с ним поработать. Спасибо за предложение! – user3018925

Смежные вопросы