📄 page.java
字号:
package work4;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Page extends JFrame implements ActionListener{
JLabel label1,label2,label3,label4,label5;
JTextField text,text2,text3;
JButton button1,button2,button3,button4,button5,button6,button7,button8,button9,button10;
DefaultListModel model1=new DefaultListModel();
JList li1=new JList(model1);
DefaultListModel model2=new DefaultListModel();
JList li2=new JList(model2);
JFrame addframe,deFrame,checkframe;
int memory,delnum,num=0,checknum,threadnum=0,delclick=0;
static final int size=4;
public void actionPerformed(ActionEvent e){
if(e.getSource()==button1){
add_thread_frame();
}
if(e.getSource()==button2){
System.exit(0);
}
if(e.getSource()==button3){
String str=text.getText().trim();
memory=Integer.parseInt(str);
addframe.setVisible(false);
threadnum++;
if(delclick==0){
table_frame();
memory_frame();
}
else {
add_after_click();
}
}
if(e.getSource()==button4){
addframe.setVisible(false);
}
if(e.getSource()==button5){
destroy_thread_frame();
}
if(e.getSource()==button6){
String str=text2.getText().trim();
delnum=Integer.parseInt(str);
deFrame.setVisible(false);
delclick++;
destroy_thread();
}
if(e.getSource()==button7){
deFrame.setVisible(false);
}
if(e.getSource()==button8){
check_frame();
}
if(e.getSource()==button9){
String str=text3.getText().trim();
checknum=Integer.parseInt(str);
checkframe.setVisible(false);
check();
}
if(e.getSource()==button10){
checkframe.setVisible(false);
}
}
public void memory_frame(){
int boxnum=memory/size;
int left=memory%size;
for(int i=num;i<=boxnum+num-1;i++){
String box=i+"号被装入"+"进程"+(threadnum-1)+"的"+" 4K";
model2.addElement(box);
}
if(left>0){
model2.addElement(num+boxnum+"号被装入"+"进程"+(threadnum-1)+"的 "+left+"K");
}
num=num+boxnum+1;
}
public void table_frame(){
int boxnum=memory/size;
int left=memory%size;
if(left>0){boxnum=boxnum+1;}
for(int j=0;j<boxnum;j++){
model1.addElement("进程"+(threadnum-1)+"页号"+j+"对应内存的地址为"+(num+j));
}
}
public void destroy_thread(){
for(int k=0;k<model1.getSize();k++){
String str1=model1.getElementAt(k).toString();
int i1=str1.indexOf("程");
String searchnum1=str1.substring(i1+1,i1+2);
int selectnum1=Integer.parseInt(searchnum1);
if(delnum==selectnum1){
model1.removeElementAt(k);
k--;
}
}
for(int j=0;j<model2.getSize();j++){
String str2=model2.getElementAt(j).toString();
int i2=str2.indexOf("程");
String searchnum2=str2.substring(i2+1,i2+2);
int selectnum2=Integer.parseInt(searchnum2);
if(delnum==selectnum2){
model2.setElementAt(j+"号空闲",j);
}
}
}
public void add_after_click(){
int boxnum=memory/size;
int left=memory%size;
int k=0,i=0;
for(int j=0;j<model2.getSize();j++){
String str3=model2.getElementAt(j).toString();
int i3=str3.indexOf("号");
String searchnum3=str3.substring(i3+1,i3+3);
if(searchnum3.equals("空闲")){
k++;
}
}
for(int j=0;j<model2.getSize();j++){
String str3=model2.getElementAt(j).toString();
int i3=str3.indexOf("号");
String searchnum3=str3.substring(i3+1,i3+3);
if(memory<=4*k){
if(searchnum3.equals("空闲"))
{
if(i<boxnum){
model2.setElementAt(j+"号被装入"+"进程"+(threadnum-1)+"的"+" 4K",j);
i++;
}
if((memory-4*i)<4&&(memory-4*i)>0) {
model2.setElementAt(j+1+"号被装入"+"进程"+(threadnum-1)+"的 "+left+"K",j+1);
i++;
}
}
}
else if(memory>4*k){
if(searchnum3.equals("空闲")){
model2.setElementAt(j+"号被装入"+"进程"+(threadnum-1)+"的"+" 4K",j);
}
}
}
if (memory>4*k){
int memoryleft=memory-4*k;
int leftnum=memoryleft/size;
int leftsize=memoryleft%size;
int model2Length=model2.getSize();
for(int i2=0;i2<leftnum;i2++){
String box1=(model2Length+i2)+"号被装入"+"进程"+(threadnum-1)+"的"+" 4K";
model2.addElement(box1);
}
if(leftsize>0){
String str4=(model2Length+leftnum)+"号被装入"+"进程"+(threadnum-1)+"的 " +leftsize+"K";
model2.addElement(str4);
}
}
int address=0;
int j1=0;
if(left>0){boxnum=boxnum+1;}
for(int j=0;j<model2.getSize();j++){
String str3=model2.getElementAt(j).toString();
int i2=str3.indexOf("程");
String searchnum2=str3.substring(i2+1,i2+2);
int selectnum2=Integer.parseInt(searchnum2);
int i3=str3.indexOf("号");
String str4=str3.substring(0,i3);
int i4=Integer.parseInt(str4);
if(selectnum2==threadnum-1){
address=i4;
if(j1<boxnum){
model1.addElement("进程"+(threadnum-1)+"页号"+j1+"对应内存的地址为"+address);
j1++;
}
}
}
}
public void check(){
String str="";
for(int k=0;k<model1.getSize();k++){
String str1=model1.getElementAt(k).toString();
int i1=str1.indexOf("程");
String str2=str1.substring(i1+1,i1+2);
int findnum=Integer.parseInt(str2);
int i2=str1.indexOf("为");
String str3=str1.substring(i2+1);
int addressnum=Integer.parseInt(str3);
if(findnum==checknum){
str=str+addressnum+" ";
}
}
JOptionPane.showMessageDialog(null,checknum+"号作业"+"对应的地址是:"+str+"");
}
public Page(){
super("实验二:简单分页的模拟");
setSize(800,700);
setLayout(null);
setLocation(240,50);
label1=new JLabel("页表分配情况");
add(label1);
label1.setBounds(60,50,250,50);
li1.setVisibleRowCount(6);li1.setFixedCellWidth(200);
JScrollPane panel1=new JScrollPane(li1);
add(panel1);
panel1.setBounds(60,120,350,400);
label2=new JLabel("主存分配情况");
add(label2);
label2.setBounds(450,50,200,50);
li2.setVisibleRowCount(6);li1.setFixedCellWidth(100);
JScrollPane panel2=new JScrollPane(li2);
add(panel2);
panel2.setBounds(450,120,200,400);
button1=new JButton("添加作业");
add(button1);
button1.setBounds(100,550,100,80);
button2=new JButton("退出");
add(button2);
button2.setBounds(450,550,100,80);
button5=new JButton("撤销作业");
add(button5);
button5.setBounds(275,550,100,80);
button8=new JButton("查询");
add(button8);
button8.setBounds(625,550,100,80);
button1.addActionListener(this);
button2.addActionListener(this);
button5.addActionListener(this);
button8.addActionListener(this);
}
public void add_thread_frame(){
addframe=new JFrame("");
addframe.setSize(300,200);
addframe.setLayout(null);
addframe.setLocation(370,330);
addframe.setResizable(false);
label3=new JLabel("请输入作业的大小");
addframe.add(label3);
label3.setBounds(20,20,180,25);
text=new JTextField();
addframe.add(text);
text.setBounds(150,20,80,20);
button3=new JButton("确定");
addframe.add(button3);
button3.setBounds(50,70,80,30);
button3.setCursor(new Cursor(12));
button4=new JButton("取消");
addframe.add(button4);
button4.setBounds(160,70,80,30);
button4.setCursor(new Cursor(12));
button3.addActionListener(this);
button4.addActionListener(this);
addframe.setVisible(true);
}
public void destroy_thread_frame(){
deFrame=new JFrame("撤销进程");
deFrame.setSize(300,150);
deFrame.setLayout(null);
deFrame.setLocation(370,330);
deFrame.setResizable(false);
label4=new JLabel("请输入想要撤消的作业号");
deFrame.add(label4);
label4.setBounds(20,20,180,25);
text2=new JTextField();
deFrame.add(text2);
text2.setBounds(200,20,30,20);
button6=new JButton("确定");
deFrame.add(button6);
button6.setBounds(50,70,80,30);
button6.setCursor(new Cursor(12));
button7=new JButton("取消");
deFrame.add(button7);
button7.setBounds(160,70,80,30);
button7.setCursor(new Cursor(12));
button6.addActionListener(this);
button7.addActionListener(this);
deFrame.setVisible(true);
}
public void check_frame(){
checkframe=new JFrame("撤销进程");
checkframe.setSize(300,150);
checkframe.setLayout(null);
checkframe.setLocation(370,330);
checkframe.setResizable(false);
label5=new JLabel("请输入想要查询的作业号");
checkframe.add(label5);
label5.setBounds(20,20,180,25);
text3=new JTextField();
checkframe.add(text3);
text3.setBounds(200,20,30,20);
button9=new JButton("确定");
checkframe.add(button9);
button9.setBounds(50,70,80,30);
button9.setCursor(new Cursor(12));
button10=new JButton("取消");
checkframe.add(button10);
button10.setBounds(160,70,80,30);
button10.setCursor(new Cursor(12));
button9.addActionListener(this);
button10.addActionListener(this);
checkframe.setVisible(true);
}
public static void main(String args[]){
Page pages=new Page();
pages.show();
pages.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -