📄 frame1.java
字号:
package OS;
import java.awt.*;
import javax.swing.*;
import java.awt.Rectangle;
import java.awt.event.*;
import java.util.*;
import javax.swing.JTable.*;
import javax.swing.table.*;
import javax.swing.table.DefaultTableModel;
import java.awt.event.*;
import javax.swing.text.PlainDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2008</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class Frame1
extends JFrame implements ItemListener {
JPanel contentPane;
JScrollPane jScrollPane1 = new JScrollPane();
JScrollPane jScrollPane2 = new JScrollPane();
JScrollPane jScrollPane3 = new JScrollPane();
JScrollPane jScrollPane4 = new JScrollPane();
JScrollPane jScrollPane5 = new JScrollPane();
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JLabel jLabel3 = new JLabel();
JLabel jLabel4 = new JLabel();
JLabel jLabel5 = new JLabel();
JLabel jLabel6 = new JLabel();
JLabel jLabel7 = new JLabel();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JButton jButton3 = new JButton();
JButton jButton4 = new JButton();
JTextField jTextField1 = new JTextField();
JTextField jTextField2 = new JTextField();
ButtonGroup checkboxGroup1 = new ButtonGroup();
JRadioButton jRadioButton1 = new JRadioButton();
JRadioButton jRadioButton2 = new JRadioButton();
Vector Storevector = new Vector();
Vector Readyvector = new Vector();
PCB Runprocess = new PCB();
Vector Hangvector = new Vector();
PCB temp = new PCB();
Vector columnNames = new Vector(4);
MyModel model1, model2, model3, model4, model5;
int number = 0, volume;
JTable jTable1 = new JTable();
JTable jTable2 = new JTable();
JTable jTable3 = new JTable();
JTable jTable4 = new JTable();
JTable jTable5 = new JTable();
int timeslice = 1;
boolean run = false, accept = false, hangit = false;
ProcessRun prt;
public Frame1() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
}
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(800, 550));
setResizable(false);
setTitle("Privilege");
jButton1.setBounds(new Rectangle(612, 290, 81, 23));
jButton1.setText("添加进程");
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
jButton2.setBounds(new Rectangle(376, 384, 58, 23));
jButton2.setText("执行");
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton2_actionPerformed(e);
}
});
jLabel1.setText("后备队列");
jLabel1.setBounds(new Rectangle(620, 12, 55, 27));
jLabel2.setText("就绪队列");
jLabel2.setBounds(new Rectangle(380, 12, 55, 27));
jLabel3.setText("运行进程");
jLabel3.setBounds(new Rectangle(381, 290, 55, 27));
jLabel4.setText("完成的进程");
jLabel4.setBounds(new Rectangle(114, 12, 65, 27));
jLabel5.setText("内存道数:");
jLabel5.setBounds(new Rectangle(591, 355, 62, 20));
jLabel6.setText("挂起队列");
jLabel6.setBounds(new Rectangle(114, 290, 65, 27));
jLabel7.setText("时间片长度:");
jLabel7.setBounds(new Rectangle(606, 447, 78, 21));
jTextField1.setText("4");
jTextField1.setBounds(new Rectangle(662, 356, 48, 20));
jTextField2.setEnabled(false);
jTextField2.setText("1");
jTextField2.setBounds(new Rectangle(688, 447, 48, 20));
jScrollPane1.setBounds(new Rectangle(529, 43, 245, 227));
jScrollPane2.setBounds(new Rectangle(273, 43, 245, 227));
jScrollPane3.setBounds(new Rectangle(273, 321, 245, 40));
jScrollPane4.setBounds(new Rectangle(17, 43, 245, 227));
jScrollPane5.setBounds(new Rectangle(17, 321, 245, 167));
jRadioButton1.setText("优先权算法");
jRadioButton1.setBounds(new Rectangle(585, 385, 103, 23));
jRadioButton2.setText("时间片算法");
jRadioButton2.setBounds(new Rectangle(585, 416, 103, 23));
jButton3.setBounds(new Rectangle(282, 400, 56, 22));
jButton3.setText("挂起");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
jButton3_actionPerformed(e);
}
});
jButton4.setBounds(new Rectangle(281, 443, 56, 22));
jButton4.setText("解挂");
jButton4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
jButton4_actionPerformed(e);
}
});
contentPane.add(jLabel1);
contentPane.add(jLabel2);
contentPane.add(jLabel3);
contentPane.add(jLabel4);
contentPane.add(jLabel5);
contentPane.add(jLabel6);
contentPane.add(jLabel7);
contentPane.add(jScrollPane1);
contentPane.add(jScrollPane2);
contentPane.add(jScrollPane3);
contentPane.add(jScrollPane4);
contentPane.add(jScrollPane5);
contentPane.add(jRadioButton1);
contentPane.add(jRadioButton2);
contentPane.add(jTextField1);
contentPane.add(jTextField2);
contentPane.add(jButton1);
contentPane.add(jButton2);
contentPane.add(jButton3);
contentPane.add(jButton4);
columnNames.addElement("PID");
columnNames.addElement("PRIV");
columnNames.addElement("SUMTIME");
columnNames.addElement("RUNTIME");
model1 = new MyModel(columnNames, 0);
jTable1 = new JTable(model1);
//model1.addRow(new Object[]{"1","2","20"});
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTable1.setVisible(true);
jScrollPane1.getViewport().add(jTable1, null);
jTable1.getColumnModel().getColumn(0).setPreferredWidth(70);
jTable1.getColumnModel().getColumn(1).setPreferredWidth(70);
jTable1.getColumnModel().getColumn(2).setPreferredWidth(90);
model2 = new MyModel(columnNames, 0);
jTable2 = new JTable(model2);
jTable2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTable2.setVisible(true);
jScrollPane2.getViewport().add(jTable2, null);
jTable2.getColumnModel().getColumn(0).setPreferredWidth(70);
jTable2.getColumnModel().getColumn(1).setPreferredWidth(70);
jTable2.getColumnModel().getColumn(2).setPreferredWidth(90);
model3 = new MyModel(columnNames, 0);
jTable3 = new JTable(model3);
jTable3.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTable3.setVisible(true);
jScrollPane3.getViewport().add(jTable3, null);
jTable3.getColumnModel().getColumn(0).setPreferredWidth(70);
jTable3.getColumnModel().getColumn(1).setPreferredWidth(70);
jTable3.getColumnModel().getColumn(2).setPreferredWidth(90);
model4 = new MyModel(columnNames, 0);
jTable4 = new JTable(model4);
jTable4.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTable4.setVisible(true);
jScrollPane4.getViewport().add(jTable4, null);
jTable4.getColumnModel().getColumn(0).setPreferredWidth(70);
jTable4.getColumnModel().getColumn(1).setPreferredWidth(70);
jTable4.getColumnModel().getColumn(2).setPreferredWidth(90);
model5 = new MyModel(columnNames, 0);
jTable5 = new JTable(model5);
jTable5.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTable5.setVisible(true);
jScrollPane5.getViewport().add(jTable5, null);
jTable5.getColumnModel().getColumn(0).setPreferredWidth(70);
jTable5.getColumnModel().getColumn(1).setPreferredWidth(70);
jTable5.getColumnModel().getColumn(2).setPreferredWidth(90);
jTable1.getTableHeader().setReorderingAllowed(false);
//作用是用户不可以改变各个列的顺序,也就是说:不能把第二列挪到的一列前边去...
jTable1.getTableHeader().setResizingAllowed(false);
//作用是用户不可以通过用鼠标在table的头部拖动来改变各个列的宽度。
jTable2.getTableHeader().setReorderingAllowed(false);
jTable2.getTableHeader().setResizingAllowed(false);
jTable3.getTableHeader().setReorderingAllowed(false);
jTable3.getTableHeader().setResizingAllowed(false);
jTable4.getTableHeader().setReorderingAllowed(false);
jTable4.getTableHeader().setResizingAllowed(false);
jTable5.getTableHeader().setReorderingAllowed(false);
jTable5.getTableHeader().setResizingAllowed(false);
checkboxGroup1.add(jRadioButton1);
checkboxGroup1.add(jRadioButton2);
jRadioButton1.setSelected(true);
//jRadioButton1.addItemListener(this);
jRadioButton2.addItemListener(this);
}
public void jButton1_actionPerformed(ActionEvent e) {
Process dlg = new Process(this, true);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = dlg.getSize();
dlg.setLocation( (screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
dlg.setVisible(true);
}
public void jButton2_actionPerformed(ActionEvent e) {
run = true;
prt = new ProcessRun();
prt.start();
}
public void jButton3_actionPerformed(ActionEvent e) {
if (accept) {
hangit = true;
Hangle();
}
}
public void jButton4_actionPerformed(ActionEvent e) {
if (jTable5.getSelectedRow() >= 0) {
if (Readyvector.size() == volume) {
JOptionPane.showMessageDialog(contentPane, "此时无法解挂!", "提示", 1);
}
else {
int k = jTable5.getSelectedRow();
if (Readyvector.size() == 0) {
Readyvector.insertElementAt( (PCB) Hangvector.elementAt(k), 0);
Runprocess = new PCB();
Runprocess = (PCB) Readyvector.elementAt(0);
model3.addRow(Runprocess);
jScrollPane3.paintAll(jScrollPane3.getGraphics());
model5.removeRow(k);
jScrollPane5.paintAll(jScrollPane5.getGraphics());
synchronized (prt) {
accept = true;
prt.notify();
}
}
else {
if (accept) {
if (jRadioButton2.isSelected()) {
Readyvector.addElement( (PCB) (PCB) Hangvector.elementAt(k));
model5.removeRow(k);
jScrollPane5.paintAll(jScrollPane5.getGraphics());
model2.addRow( (PCB) Hangvector.elementAt(k));
jScrollPane2.paintAll(jScrollPane2.getGraphics());
Hangvector.removeElementAt(k);
}
else {
int insert = 1;
for (int i = 1; i < Readyvector.size(); i++) {
if ( ( (PCB) Hangvector.elementAt(k)).Priv.
compareTo( ( (PCB)
Readyvector.elementAt(i)).Priv) <= 0) {
insert++;
}
}
Readyvector.insertElementAt( (PCB) Hangvector.elementAt(k),
insert);
System.out.println("" + insert);
model2.insertRow(insert - 1, (PCB) Hangvector.elementAt(k));
jScrollPane2.paintAll(jScrollPane2.getGraphics());
model5.removeRow(k);
jScrollPane5.paintAll(jScrollPane5.getGraphics());
Hangvector.removeElementAt(k);
}
}
}
}
}
}
public void Hangle() {
if (jTable3.getSelectedRow() == 0) {
hangit = false;
Hangvector.addElement( (PCB) Readyvector.elementAt(0));
model5.addRow( (PCB) Readyvector.elementAt(0));
jScrollPane5.paintAll(jScrollPane5.getGraphics());
Readyvector.removeElementAt(0);
if (Readyvector.size() == 0) {
model3.removeRow(0);
jScrollPane3.paintAll(jScrollPane3.getGraphics());
synchronized (prt) {
try {
prt.wait();
}
catch (InterruptedException ew) {}
}
}
else {
Runprocess = new PCB();
Runprocess = (PCB) Readyvector.elementAt(0);
model3.removeRow(0);
model3.addRow(Runprocess);
jScrollPane3.paintAll(jScrollPane3.getGraphics());
model2.removeRow(0);
jScrollPane2.paintAll(jScrollPane2.getGraphics());
}
}
else {
if (jTable2.getSelectedRow() >= 0) {
hangit = false;
int k = jTable2.getSelectedRow();
Hangvector.addElement( (PCB) Readyvector.elementAt(k + 1));
model5.addRow( (PCB) Readyvector.elementAt(k + 1));
Readyvector.removeElementAt(k + 1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -