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

📄 suanfamain.java

📁 实现可变分区分配与回收
💻 JAVA
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

/*
 * 
 * 课题:存储管理——动态分区分配算法的模拟
 *
 */

//分配算法界面
public class SuanFaMain extends JFrame implements ActionListener, ItemListener {

	ImageIcon p = new ImageIcon("tx_001.png"); // 用于作为标题栏图标
	// b1~b5为选择算法的单选键
	JRadioButton b1 = new JRadioButton();
	JRadioButton b2 = new JRadioButton();
	JRadioButton b3 = new JRadioButton();
	JRadioButton b4 = new JRadioButton();
	JRadioButton b5 = new JRadioButton();

	// jCB为选择等待作业数的下拉菜单
	JComboBox jCB = new JComboBox();

	// group为单选键区
	ButtonGroup group = new ButtonGroup();

	// jl1显示下方下拉菜单的选择内容,即等待作业数和空闲分区数
	JLabel jl1 = new JLabel();

	// jl2提示下拉菜单的作用
	JLabel jl2 = new JLabel();

	// b按钮在后面添加了监听器,以触发各个算法
	JButton b = new JButton("GO");

	// 设置wait的初值为1,代表等待作业数
	int wait = 1;

	// 调用build方法以wait(即1)作为数组长度随机生成等待作业的初始数组
	int[] x = build(wait);

	// 以下为随机创建作业数组的方法
	public int[] build(int n) {

		// 定义一个长度为n的数组aa
		int[] aa = new int[n];
		Random r = new Random();

		// 通过for循环将每一次用Random类生成的随机数存入aa
		for (int i = 0; i < n; i++) {
			int r1 = r.nextInt(100) + 1;
			aa[i] = r1;
		}
		return aa;

	}

	public SuanFaMain() {

		this.setIconImage(p.getImage());
		// 主界面由5个JPanel组成,intro为第一个,添加introJl用于显示课题信息
		JPanel intro = new JPanel();
		JLabel introJl = new JLabel();
		intro.add(introJl);
		introJl.setText("              分配算法选择              ");
		add(intro);

		// 设置各个单选键文本内容并添加监听器,使用setToolTipText设置提示信息
		b1.setText("1、首次适应算法");
		b2.setText("2、循环首次适应算法");
		b3.setText("3、最佳适应算法");
		b4.setText("4、最坏适应算法");
		b5.setText("5、快速适应算法");
		b1.setToolTipText("使用首次适应算法分配1个作业");
		b2.setToolTipText("使用循环首次适应算法1个作业");
		b3.setToolTipText("使用最佳适应算法1个作业");
		b4.setToolTipText("使用最坏适应算法1个作业");
		b5.setToolTipText("使用快速适应算法1个作业");
		b.addActionListener(this);
		b1.addActionListener(this);
		b2.addActionListener(this);
		b3.addActionListener(this);
		b4.addActionListener(this);
		b5.addActionListener(this);
		group.add(b1);
		group.add(b2);
		group.add(b3);
		group.add(b4);
		group.add(b5);

		// p为第二个JPanel
		JPanel p = new JPanel();
		// 设置第二个JPanel上的jl1 JLabel初始显示信息
		jl1.setText("初始假定待分配作业数为1");
		// 添加该JLabel到p上
		p.add(jl1);
		// 添加该JPanel
		add(p);

		// p1为第三个Panel,此JPanel由于要显示5个算法的单选键,所以设置为5行的GridLayout布局
		JPanel p1 = new JPanel();
		p1.setLayout(new GridLayout(5, 1));
		p1.add(b1);
		p1.add(b2);
		p1.add(b3);
		p1.add(b4);
		p1.add(b5);
		add(p1);

		// p2上主要显示两个下来菜单,并由于需要提示对应下拉菜单的功能,所以加多两个JLabel用于显示提示信息
		JPanel p2 = new JPanel();
		jl2.setText("待分配作业数:");
		// 通过使用循环为下拉菜单jCB、jCB2添加对应数量的项,
		for (int i = 0; i < 10; i++) {
			jCB.addItem((i + 1));
		}
		// 为下拉菜单添加监听器,用于发生变化时触发itemStateChanged
		jCB.addItemListener(this);
		jCB.setToolTipText("下拉选择待分配作业数");
		p2.add(jl2);
		p2.add(jCB);
		add(p2);

		// p3上仅有一个按钮b
		JPanel p3 = new JPanel();
		p3.add(b);
		b.setToolTipText("执行");
		add(p3);

		// 将这个JFrame窗口的布局设为FlowLayout
		setLayout(new FlowLayout());
		// 设置窗口大小,
		setSize(400, 220);
		// 大小不可更改
		setResizable(false);
		setLocation(300, 400);
		// 显示
		setVisible(true);
		// 设置窗口右上角的关闭按钮事件为结束程序
		setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
		// 设置标题栏为我们组题目的信息
		setTitle("课题八:存储管理——动态分区分配算法的模拟");
	}
	public static void main(String[] args){
		SuanFaMain s=new SuanFaMain();
	}

	public void actionPerformed(ActionEvent arg0) {
		// TODO 自动生成方法存根
		mem[] m = Test.build();
		if (arg0.getSource() == b) {// 以下均为点中"GO"按钮后的处理
			// 假如选中第一个单选键,则执行首次适应算法
			if (b1.isSelected()) {
				new FirstFit(x, m);
			} else {
				// 假如选中第二个单选键,则执行循环首次适应算法
				if (b2.isSelected()) {
					new NextFit(x, m);
				} else {
					// 假如选中第三个单选键,则执行最佳适应算法
					if (b3.isSelected()) {
						new BestFit(x, m);
					} else {
						// 假如选中第四个单选键,则执行最坏适应算法
						if (b4.isSelected()) {
							new WorstFit(x, m);
						} else {
							// 假如选中第五个单选键,则执行快速适应算法
							if (b5.isSelected()) {
								new QuickFit(x, m);
							} else {// 如果没有一个单选键被选中,则显示一个提示对话框
								JOptionPane.showMessageDialog(this, "请选择算法");
							}
						}
					}
				}
			}
		}

	}

	public void itemStateChanged(ItemEvent arg0) {
		// TODO 自动生成方法存根
		// 这是一个下拉条状态发生变化时的响应
		// 把jl1上的显示设置为以下内容
		jl1.setText("以下假定待分配作业数为" + (jCB.getSelectedIndex() + 1));
		// 改变wait的值,并作为参数传递给build方法以生成新的随机数组,直到下拉菜单状态下一次发生变化
		wait = (jCB.getSelectedIndex() + 1);
		x = build(wait);
		// 改变提示信息
		b1.setToolTipText("使用首次适应算法分配" + wait + "个作业");
		b2.setToolTipText("使用循环首次适应算法" + wait + "个作业");
		b3.setToolTipText("使用最佳适应算法" + wait + "个作业");
		b4.setToolTipText("使用最坏适应算法" + wait + "个作业");
		b5.setToolTipText("使用快速适应算法" + wait + "个作业");
	}

}

⌨️ 快捷键说明

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