?? 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 + -