2014-01-22 53 views
0

本週我在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); 
} 

}

回答

0

我試圖讓CircleMouse類

的ArrayList聽起來並不完全正確。你應該有ArrayListPoint。每次mouseClicked被調用時,你應該從MouseEvent給它添加Point,那麼你的paintComponent方法,你應該遍歷這個列表,並繪製「點」

爲例子...

+0

這聽起來對我來說更爲正確。你有任何例子或參考?我會更仔細地看看代碼,看看我是否能找到它。感謝您的建議! – user3018925