⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.java

📁 最近点对问题的图形界面实现
💻 JAVA
字号:
package firstproblem;

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Test extends JApplet {
	JButton mouseInput = null;
	JButton endMouseInput = null;
	JLabel label = null;
	JTextField field = null;
	JButton randomPairs = null;
	JPanel north = null;
	MyCanvas canvas = null;
	// 存储鼠标输入的点
	List<Point1> plist = new ArrayList<Point1>();
	// 用于判断输入方式
	int state = -1;
	// id用于表示鼠标输入点的编号
	int id;
	// id2用于表示随机输入点的编号
	int id2;
	// 用于记录最近点对
	Pair pair = null;
	// applet的大小
	int width ,height;
	public void init() {
		setLayout(new BorderLayout());
		// setSize(650, 400);
		mouseInput = new JButton("鼠标输入");
		endMouseInput = new JButton("标识最近点对");
		label = new JLabel("请输入随机点的个数:");
		field = new JTextField(10);
		randomPairs = new JButton("输出最近的随机点对");
		north = new JPanel();
		north.add(mouseInput);
		north.add(endMouseInput);
		north.add(label);
		north.add(field);
		north.add(randomPairs);
		add(north, BorderLayout.NORTH);
		canvas = new MyCanvas();
		add(canvas, BorderLayout.CENTER);
		canvas.addMouseListener(new MouseListener() {

			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@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
				if (state == 0) {
					++id;
					plist.add(new Point1(e.getPoint().x, e.getPoint().y, id));
					canvas.repaint();
				}
			}

			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub

			}

		});
		mouseInput.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				// 鼠标输入
				state = 0;
				id = 0;
				pair = null;
				plist.clear();
				canvas.repaint();
			}
		});
		endMouseInput.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				Point1 p[] = new Point1[plist.size()];
				for (int i = 0; i < p.length; i++) {
					Point1 p1 = plist.get(i);
					p[i] = new Point1(p1.x, p1.y, p1.id);
				}
				pair = ClosestPair.cpair2(p);
				// System.out.println(pair.a.toString());
				// System.out.println(pair.b.toString());
				if(pair==null){
					JOptionPane.showMessageDialog(getParent(),"请输入2个或2个以上的点");
				}
				canvas.repaint();
			}
		});
		randomPairs.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				plist.clear();
				state = -1;
				id2 = 0;
				repaint();
				int count = Integer.parseInt(field.getText());
				for(int i=0;i<count;i++){
					++id2;
					Point1 p = new Point1((int)(Math.random()*width+1),(int)(Math.random()*height+1),id2);
					plist.add(p);
				}
				Point1 p[] = new Point1[plist.size()];
				for (int i = 0; i < p.length; i++) {
					Point1 p1 = plist.get(i);
					p[i] = new Point1(p1.x, p1.y, p1.id);
				}
				// 用于计算O(nlgn)经过的时间
				long start = System.nanoTime();
				System.out.println("ClosestPair.cpair2 start:"+start);
				pair = ClosestPair.cpair2(p);
				long end = System.nanoTime();
				System.out.println("ClosestPair.cpair2 end:"+end);
				System.out.println("经过了:"+(end-start)+"纳秒");
				// 用于计算O(n^2)经过的时间
				start = System.nanoTime();
				System.out.println("ClosestPair2.cpair start:"+start);
				pair = ClosestPair2.cpair(p);
				end = System.nanoTime();
				System.out.println("ClosestPair2.cpair end:"+end);
				System.out.println("经过了:"+(end-start)+"纳秒");
				// System.out.println(pair.a.toString());
				// System.out.println(pair.b.toString());
				if(pair==null){
					JOptionPane.showMessageDialog(getParent(),"请输入2个或2个以上的点");
				}
				canvas.repaint();
			}
			
		});
		// Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		// setSize(d.width,d.height);
		setSize(650,400);
		width = this.getWidth();
		height = this.getHeight();
	}

	class MyCanvas extends Canvas {
		public void paint(Graphics g) {
			g.clearRect(0, 0, this.getWidth(), this.getHeight());
			if (plist.size() > 0) {
				Iterator iterator = plist.iterator();
				while (iterator.hasNext()) {
					Point1 p = (Point1) iterator.next();
					g.setColor(Color.BLACK);
					g.drawString("●", p.x, p.y);
					if (pair != null) {
						if (((p.x == pair.a.x) && (p.y == pair.a.y))
								|| ((p.x == pair.b.x) && (p.y == pair.b.y))) {
							g.setColor(Color.RED);
							g.drawString("●", p.x, p.y);
						}
					}
				}
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -