package proImit;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Main extends JFrame implements ActionListener {
/**主函数*/
// //////////////////////////////控件声明//////////////////////////////////
private JButton jb1, jb2, jb3, jb4;
private JLabel jl1, jl2;
private JLabel jl3, jl4;
private JRadioButton rb1, rb2, rb3, rb4;
private JTextField jt1, jt2;
private JTextField jt3, jt4;
private JTable table;
private String[] columnName = { "输入的进程", "内存情况(0表示空)", "调出情况" };
private String[][] rowDate = new String[1000][3];
private JSeparator js[] = new JSeparator[4];
MyArray array;// 数组对象
// /////////////////////面板绘制////////////////////////////////
public void init() {
Container ct = getContentPane();
ct.setLayout(new BorderLayout());
JPanel jp1 = new JPanel();
jp1.setLayout(new GridLayout(3, 4));
// ////////////标签和文本输入区/////////////////////////////////
jl1 = new JLabel("输入进程数量(<1000)");
jl2 = new JLabel("输入内存空间大小");
jt1 = new JTextField("0", 5);
jt2 = new JTextField("0", 5);
for (int i = 0; i < 4; i++) {
js[i] = new JSeparator(SwingConstants.HORIZONTAL);
}
// //////////////////加入面板jp1///////////////////////////////
jp1.add(jl1);
jp1.add(jt1);
jp1.add(jl2);
jp1.add(jt2);
for (int i = 0; i < 4; i++)
jp1.add(js[i]);
// ////////////////////单选按钮并加入组合///////////////////////
rb1 = new JRadioButton("OPT");
rb2 = new JRadioButton("LRU");
rb3 = new JRadioButton("FIFO");
rb4 = new JRadioButton("default");
ButtonGroup bg = new ButtonGroup();
bg.add(rb1);
rb1.setSelected(true);
bg.add(rb2);
bg.add(rb3);
bg.add(rb4);
// ////////////////////////按钮加入面板/////////////////////////
jp1.add(rb1);
jp1.add(rb2);
jp1.add(rb3);
jp1.add(rb4);
ct.add(jp1, BorderLayout.NORTH);
// //////////////////////按钮初始化/////////////////////////
jb1 = new JButton("手动输入");
jb1.addActionListener(this);
jb2 = new JButton("随机生成");
jb2.addActionListener(this);
jb3 = new JButton("清空");
jb3.addActionListener(this);
jb4 = new JButton("退出");
jb4.addActionListener(this);
// ///////////////table的属性设置/////////////////////////
table = new JTable(rowDate, columnName);
table.setShowGrid(true);
table.setRowHeight(25);
table.setEnabled(false);
table.setVisible(false);
table.setGridColor(new Color(100, 100, 100));
JScrollPane spane = new JScrollPane(table);// 加入滚动条
ct.add(spane, BorderLayout.CENTER);
// //////////////计算内容的属性设置///////////////////////////
JPanel jp2 = new JPanel();
jp2.setLayout(new FlowLayout());
jl3 = new JLabel("缺页次数");
jl4 = new JLabel("缺页率");
jt3 = new JTextField("0", 5);
jt4 = new JTextField("0", 5);
jt3.setEnabled(false);
jt4.setEnabled(false);
jp2.add(jb1);
jp2.add(jb2);
jp2.add(jl3);
jp2.add(jt3);
jp2.add(jl4);
jp2.add(jt4);
jp2.add(jb3);
jp2.add(jb4);
ct.add(jp2, BorderLayout.SOUTH);
}
//////////////////////每次使用前清空表格////////////////////////////////////////
public void newTable() {
for (int i = 0; i < 1000; i++)
for (int j = 0; j < 3; j++)
rowDate[i][j] = " ";
}
///////////////////构造函数(对话框初始化)///////////////////////////////////////
public Main() {
super("JAVA调度算法模拟");
init();
this.setSize(600, 500);
this.setVisible(true);
this.setLocation(300, 200);
}
////////////////////主函数///////////////////////////////////////
public static void main(String[] arg) {
new Main();
}
///////////////////////侦听//////////////////////////////////////
public void actionPerformed(ActionEvent e) {
try{
int m = Integer.parseInt(jt1.getText());// 进程数
int n = Integer.parseInt(jt2.getText());// 内存数
int s[] = new int[m];//用来保存输入的数的缓冲空间
newTable();// 使用前清空表格
table.setVisible(false);
if(e.getSource()==jb4)
System.exit(0);//系统退出
if (rb1.isSelected()) {//是否选中了OPT算法
if (m == 0 || n == 0) {//是否输入进程数和内存大小
JOptionPane.showMessageDialog(null, "请输入进程数和内存块大小");
jt1.setText("0");
jt2.setText("0");
} else {
if (e.getSource() == jb1)// 按钮1的监听
{
for (int i = 0; i < m; i++) {
try {
s[i] = Integer.parseInt(JOptionPane
.showInputDialog(null, "请输入进程" + (i + 1)
+ "\\" + (m)));
rowDate[i][0] = "----" + s[i] + "----";// 进入内存数
} catch (NumberFormatException w1) {
JOptionPane.showMessageDialog(null, "输入出现异常");
break;
}
}
array = new MyArray(m, n, s);
String ss[][] = array.OPT(m, n, s);// 调用OPT算法
jt3.setText(" " + array.getQcount());
jt4.setText(" " + (float) (array.getQcount() * 1000 / m)
/ 1000);// 缺页率
for (int i = 0; i < m; i++)
for (int j = 0; j < 2; j++) {
rowDate[i][j + 1] = ss[i][j] + " ";// 显示到table控件中
}
table.setVisible(true);
} else if (e.getSource() == jb2) {
for (int i = 0; i < m; i++) {
s[i] = (int) (Math.random() * 10) + 1;
rowDate[i][0] = "----" + s[i] + "----";// 进入内存数
}
array = new MyArray(m, n, s);
String ss[][] = array.OPT(m, n, s);// 调用OPT算法
jt3.setText(" " + array.getQcount());// 缺页数
jt4.setText(" " + (float) (array.getQcount() * 1000 / m)
/ 1000);// 缺页率
for (int i = 0; i < m; i++)
for (int j = 0; j < 2; j++) {
rowDate[i][j + 1] = ss[i][j] + " ";// 显示到table控件中
}
table.setVisible(true);
} else if (e.getSource() == jb3) {
jt1.setText("0");
jt2.setText("0");
jt3.setText("0");
jt4.setText("0");
table.setVisible(false);
}
}
}else if (rb2.isSelected()) {
JOptionPane.showMessageDialog(null, "LRU暂未使用");
} else if (rb3.isSelected()) {
JOptionPane.showMessageDialog(null, "FIFO暂未使用");
} else if (rb4.isSelected()) {
JOptionPane.showMessageDialog(null, "DEFAULT暂未使用");
}
}catch(NumberFormatException w){
JOptionPane.showMessageDialog(null, "输入有误");
}
}
}
////////////////////////////////结束///////////////////////////////B07030519////////////////////////////////////////////
- 1
- 2
前往页