📄 os3.java
字号:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
class DrawMem extends Canvas
{
private String str = "主存空间的分配和回收";
private String unit = "(单位:K)";
public void paint (Graphics g) {
g.setFont (new Font(str, Font.PLAIN+Font.BOLD, 32));
g.drawString (str, 90, 60);
g.drawRect (15, 100, 512, 40);
g.setFont (new Font(unit, Font.PLAIN, 10));
g.drawString (unit, 3, 163);
for (int i=0; i<=120; i+=10) {
g.drawString (String.valueOf(i), 11+i*4, 153);
g.drawLine (15+i*4, 140, 15+i*4, 143);
}
//g.drawString ("0", 15, 152);
g.drawString ("128", 530, 153);
}
public void draw (int x, int width) {
Graphics gr = getGraphics();
gr.setColor (Color.red);
gr.fillRect (x, 100, width, 40);
//gr.fill3DRect (x, 100, width, 40, true);
gr.setColor (Color.black);
gr.drawLine (x, 100, x, 140);
gr.drawLine (x+width-1, 100, x+width-1, 140);
}
public void clear (int x, int width) {
Graphics gg = getGraphics();
gg.clearRect (x, 100, width, 40);
gg.setColor (Color.black);
gg.drawRect (15, 100, 512, 40);
}
}
public class OS3 extends Frame implements ActionListener
{
private int step = 4;
private boolean[] flag = new boolean[128];
private Button add = new Button ("增加作业");
private Button del = new Button ("回收作业");
private List list = new List (4, false);
private TextField name = new TextField (6);
private TextField size = new TextField (6);
private Label lab1 = new Label (" 作业名:");
private Label lab2 = new Label (" 作业大小(K):");
private Label lab3 = new Label ("内存中的作业:");
public DrawMem drawing = new DrawMem ();
static int[] s = new int[100];
static int[] w = new int[100];
private String str, str1, str2, str3, str4;
private int start, end, len, t=0;
private boolean find = false;
private class WindowCloser extends WindowAdapter {
public void windowClosing (WindowEvent we) {
System.exit (0);
}
}
private void setup () {
Panel buttons = new Panel ();
buttons.setLayout (new FlowLayout ());
buttons.add (add); buttons.add (del);
Panel input = new Panel ();
input.setLayout (new FlowLayout ());
input.add (lab1); input.add (name);
input.add (lab2); input.add (size);
Panel bottom = new Panel ();
bottom.setLayout (new GridLayout (1, 5));
bottom.add (lab3);
Panel tag = new Panel ();
tag.setLayout (new BorderLayout ());
tag.add ("North", input);
tag.add ("South", bottom);
Panel con = new Panel ();
con.setLayout (new BorderLayout ());
con.add ("North", tag);
con.add ("Center", list);
Panel cen = new Panel ();
cen.setLayout (new GridLayout (2, 1));
cen.add (drawing);
cen.add (con);
setLayout (new BorderLayout ());
add ("Center", cen);
add ("South", buttons);
}
public OS3 () {
super ("Memery Allocate and Recycle");
setup ();
add.addActionListener (this);
del.addActionListener (this);
addWindowListener (new WindowCloser ());
setSize (555, 400);
show ();
setResizable (false);
for (int i=0; i<128; i++) flag[i] = false;
}
public void actionPerformed (ActionEvent ae) {
if ((ae.getSource() == add) && (!name.getText().equals(" ")) && (!size.getText().equals(" "))) {
str1 = name.getText().trim();
str2 = size.getText().trim();
process_Add ();
if (find == false) {
ConfirmDialog ensure = new ConfirmDialog (this);
}
else {
str3 = String.valueOf (start);
str4 = String.valueOf (end);
str = "作业名:" + str1 + ",大小为:" + str2 + "K,起始地址为:" + str3 + "K,结束地址为:" + str4 + "K-1";
t++;
handleAdd (str);
drawing.draw (15+start*step, len*step);
}
}
else if ((ae.getSource() == del) && (list.getSelectedIndex() >= 0)) {
int m = list.getSelectedIndex ();
t--;
drawing.clear (15+s[m]*step, w[m]*step);
process_Del (m);
handleDel (m);
}
name.requestFocus ();
}
public void process_Add () {
len = Integer.parseInt (str2);
int sum, i;
find = false;
for (i=0; i<128 && !find; i++) {
sum = 0;
if (flag[i]) {
while (i<128 && flag[i]) i++;
}
while (i<128 && !flag[i] && sum < len) {
i++; sum++;
}
if (sum == len) {
find = true;
start = i - len;
end = i;
for (int j=start; j<end; j++) flag[j] = true;
}
}
}
public void process_Del (int m) {
for (int i=s[m]; i<s[m]+w[m]; i++) {
flag[i] = false;
}
for (int i=m; i<t; i++) {
s[i] = s[i+1];
w[i] = w[i+1];
}
}
public void handleAdd (String job) {
int m = list.getItemCount();
list.add (job);
list.select (m);
s[m] = start;
w[m] = len;
name.setText("");
size.setText("");
}
public void handleDel (int p) {
list.remove (p);
list.select (p);
}
public static void main (String[] args) {
OS3 sample = new OS3 ();
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -