📄 suanfamain.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 + -