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

📄 nettest.java

📁 Java选修课的作业
💻 JAVA
字号:

package SensorNode;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.util.ArrayList;
import javax.swing.*;
import java.awt.geom.Line2D;
import java.awt.*;

/**
 * 
 * @author WangJiayi
 * 具有图形界面的传感器网络的测试程序,
 * 其中包括一个显示镶有图形的面板的框架的类,
 * 该类含有一个MAIN函数,首先创建一个固定大小的框架对象
 * 然后再框架中绘制一个面板并显示该面板。
 *
 */

public class NetTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	 
		JFrame frame =new JFrame();
		frame.setSize(900,700);
		frame.setTitle("test");
		frame.setLocation(100, 80);
		
		Spanel  panel =new Spanel();
		frame.add(panel);
		
		
		frame .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);

	}
}
/**
 * 显示传感器网络图形的面板
 * 其中创建了一个固定传感器数量的传感器网络,传感器的坐标是随机的
 * 两个相邻的传感器之间是可以通信的。
 * 在该网络可以设置信号的产生。
 * 信号产生后立即为该信号寻找可以传送数据至datacollector的路径,
 * 并在网络中用线连接起来。
 */

class Spanel extends JPanel{

	public void paintComponent(Graphics g){
		
		super.paintComponent(g);
		Graphics2D g2 =(Graphics2D)g;
		
		//网络的图表示
		ArrayList<Node> l =new ArrayList<Node>();
		
		//在图中添加传感器
		for(int w=0;w<100;w++){
			l.add(new Node(800*Math.random(),600*Math.random(),new ArrayList<Node>()));
		}
		
		/**
		 * 设置信号的坐标
		 *信号在网络图中的类型为Node
		 *设置完毕后将信号添加入网络中
		 */
		Signal signal =new Signal(200,200);
		Node sg = new Node(signal.x,signal.y,new ArrayList<Node>());
		l.add(sg);
		
		/**
		 * 设置接收器
		 * 类似于以上的信号的设置
		 */
		Node datacollector =new Node(800,300,new ArrayList<Node>());
		l.add(datacollector);
		
		//为网络中的每个节点寻找邻居
		for(int u =0;u<l.size();u++)
				for(int v=0;v<l.size();v++)
					l.get(u).addNeighbor(l.get(v));
		
		//在面板上绘制每一个传感器,信号,接收器除外
		//信号显示为一个圆形的小圈
		double a,b;
		for(int m =0;m<l.size()-2 ;m++){
			a =l.get(m).x;
			b =l.get(m).y;
			
			Ellipse2D circle =new Ellipse2D.Double();
			circle.setFrameFromCenter(a,b,a+5,b+5);
			g2.setPaint(Color.GREEN);
			g2.fill(circle);
		}
		g2.setPaint(Color.BLACK);
		
		//画一个接收器,一个大圈
		Ellipse2D circle =new Ellipse2D.Double();
		circle.setFrameFromCenter(datacollector.x,datacollector.y,
				datacollector.x+15,datacollector.y+15);
		g2.draw(circle);
		
		//画一个信号,大圈
		 circle =new Ellipse2D.Double();
		circle.setFrameFromCenter(sg.x ,sg.y,sg.x+25,sg.y+25);
		g2.draw(circle);
		
		
		//选路
		Signal.path(sg, l);
		
		//连接信号至接收器的过程
		Node pointer =datacollector;
		while(pointer.path !=null)
		{
			Line2D.Double line =new Line2D.Double(pointer.x,pointer.y,
												  pointer.path.x,pointer.path.y);
			g2.draw(line);
			pointer =pointer.path;
		}
		
		
	}
	
	
	public static final int Mx = 10;
	public static final int My = 10;
	
	
}

⌨️ 快捷键说明

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