• 16.23


     1 import javax.swing.*;
     2 import java.awt.*;
     3 import java.awt.event.*;
     4 import java.util.ArrayList;
     5 
     6 public class Test_16_23 extends JFrame{
     7     private ArrayList xArray = new ArrayList();
     8     private ArrayList yArray = new ArrayList();
     9     
    10     private  int  xPoint,yPoint;
    11     private int radius = 5;
    12     private boolean draw = false;
    13     
    14     public Test_16_23(){
    15         add(new JP());
    16     }
    17     
    18     public static void main(String[] args) {
    19         JFrame frame = new Test_16_23();
    20         frame.setTitle("Test_16_23");
    21         frame.setSize(300, 300);
    22         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    23         frame.setLocationRelativeTo(null);
    24         frame.setVisible(true);
    25       }
    26     
    27     class JP extends JPanel{
    28         private int x1,y1,x2,y2;
    29         
    30         public JP(){
    31             addMouseListener(new MouseAdapter(){
    32                 public void mouseClicked(MouseEvent e){
    33                     xPoint = e.getX();
    34                     yPoint = e.getY();
    35                     draw = true;
    36                     xArray.add(xPoint);
    37                     yArray.add(yPoint);
    38                     
    39                     repaint();
    40                 }
    41             });
    42         }
    43         
    44         protected void paintComponent(Graphics g){
    45             super.paintComponent(g);
    46             
    47             for(int i = 0; i < xArray.size(); i++){                
    48             if(draw)
    49             //画空心圈
    50             g.drawOval((Integer.parseInt(xArray.get(i).toString()))-radius,(Integer.parseInt(yArray.get(i).toString()))-radius, 2*radius, 2*radius);
    51             }
    52             //如果点超过2个,再填充            
    53             if(xArray.size() > 1)
    54                 {                       
    55                     findTheNearest();
    56                     g.fillOval((Integer.parseInt(xArray.get(x1).toString()))-radius,(Integer.parseInt(yArray.get(y1).toString()))-radius, 2*radius, 2*radius);
    57                     g.fillOval((Integer.parseInt(xArray.get(x2).toString()))-radius,(Integer.parseInt(yArray.get(y2).toString()))-radius, 2*radius, 2*radius);
    58                 }
    59             
    60         }
    61         
    62         public void findTheNearest(){
    63             //第一对点赋值           
    64             x1 = y1 = 0;
    65             x2 = y2 = 1;
    66             double Value = 0;
    67             double minValue = theDistance(Integer.parseInt(xArray.get(0).toString()),Integer.parseInt(yArray.get(0).toString()),
    68                     Integer.parseInt(xArray.get(1).toString()),Integer.parseInt(yArray.get(1).toString()));
    69             //利用两层循环达到遍历所有点间距的目的
    70             for(int i = 0; i < xArray.size(); i++){
    71                 for(int j = i + 1; j < xArray.size(); j++){
    72                 Value = theDistance(Integer.parseInt(xArray.get(i).toString()),Integer.parseInt(yArray.get(i).toString()),Integer.parseInt(xArray.get(j).toString()),
    73                         Integer.parseInt(yArray.get(j).toString()));
    74                     if(Value < minValue)
    75                     {                        
    76                         minValue = Value;
    77                         x1 = y1 = i;
    78                         x2 = y2 = j;
    79                     }    
    80                 }           
    81             }
    82         }
    83         
    84         public double theDistance(int x1, int y1, int x2, int y2){
    85             return Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    86         }
    87     }    
    88 }
    Test_16_23.java

    效果图:

  • 相关阅读:
    multiprocessing 多进程实现 生产者与消费者模型JoinableQueue
    条件锁condition与Queue()
    threading 官方 线程对象和锁对象以及条件对象condition
    【NOIp训练】—子串查找VII(AC自动机+树链剖分+线段树)
    【NOIp训练】—子串查找VII(AC自动机+树链剖分+线段树)
    【HDU 5628】—Clarke and math(狄利克雷卷积快速幂)
    【HDU 5628】—Clarke and math(狄利克雷卷积快速幂)
    【NOIp2019模拟】题解
    【NOIp2019模拟】题解
    【NOIp2019模拟】题解
  • 原文地址:https://www.cnblogs.com/wanjiang/p/5682156.html
Copyright © 2020-2023  润新知