⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frame1.java

📁 Java开发的操作系统实验
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -