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

📄 window.java

📁 可变分区存储模拟系统-为课程设计用的。操作系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        buildConstraints(c, 0, 10, 1, 1, 0, 5);
        c.fill = GridBagConstraints.NONE;
        c.anchor = GridBagConstraints.CENTER;
        g.setConstraints(b1, c);
        b1.addActionListener(this);
        p2.add(b1);

        buildConstraints(c, 0, 11, 1, 1, 0, 5);
        c.fill = GridBagConstraints.NONE;
        c.anchor = GridBagConstraints.CENTER;
        g.setConstraints(b2, c);
        b2.addActionListener(this);
        p2.add(b2);

        buildConstraints(c, 0, 12, 1, 1, 0, 5);
        c.fill = GridBagConstraints.NONE;
        c.anchor = GridBagConstraints.CENTER;
        g.setConstraints(b3, c);
        b3.addActionListener(this);
        p2.add(b3);

        /////重置和退出////////////////
        buildConstraints(c, 0, 13, 1, 1, 0, 5);
        c.fill = GridBagConstraints.NONE;
        c.anchor = GridBagConstraints.WEST;
        g.setConstraints(f5, c);
        p2.add(f5);

        buildConstraints(c, 0, 14, 1, 1, 0, 5);
        c.fill = GridBagConstraints.NONE;
        c.anchor = GridBagConstraints.CENTER;
        g.setConstraints(b4, c);
        b4.addActionListener(this);
        p2.add(b4);

        buildConstraints(c, 0, 15, 1, 1, 0, 5);
        c.fill = GridBagConstraints.NONE;
        c.anchor = GridBagConstraints.CENTER;
        g.setConstraints(b5, c);
        b5.addActionListener(this);
        p2.add(b5);

        setContentPane(p1);
        this.mydraw();
        setVisible(true);

    }

    public void focusLost(FocusEvent evt) {}

    public void focusGained(FocusEvent evt) {
        table1.getSelectedColumn();
    }

    public static void main(String[] args) {
        window win = new window();
        win.setVisible(true);
    }

    public void actionPerformed(ActionEvent evt) {

        Object source = evt.getSource();
        if (source == s1) {
            v.setFlag(true);
        } else if (source == s2) {
            v.setFlag(false);
        } else if (source == b) { //内存大小确定
            boolean f = false;
            char[] tt = t.getText().toCharArray();
            for (int i = 0; i < tt.length; i++) {
                if (!Character.isDigit(tt[i])) {
                    JOptionPane.showMessageDialog(null, "请正确输入数字!");
                    f = true;
                    break;
                }

            }
            if (!f) {
                int store = Integer.parseInt(t.getText());
                if (store > 0) {
                    v = new visual(true, store);
                    l2.setText(store + "KB");

                    this.mydraw();
                    JOptionPane.showMessageDialog(null, "内存大小已确定!");
                    b.setEnabled(false);
                    b1.setEnabled(true);
                    b2.setEnabled(true);
                    b3.setEnabled(true);
                    t.setEditable(false);
                    t1.setEditable(true);
                    t2.setEditable(true);
                    System.out.print("0 Free:" + v.getAllFree());
                    System.out.print("0 Free:" + v.getFreeNumber());

                } else if (store <= 0) {
                    JOptionPane.showMessageDialog(null, "您输入的内存无效!");
                }
            }
        } else if (source == b1) { //添加进程

            String pro_name = new String(t1.getText());
            int pro_size = 0;
            boolean f = false;
            char[] tt = t2.getText().toCharArray();
            for (int i = 0; i < tt.length; i++) {
                if (!Character.isDigit(tt[i])) {
                    JOptionPane.showMessageDialog(null, "请正确输入数字!");
                    f = true;
                    break;
                }

            }
            if (!f) {
                int store = Integer.parseInt(t2.getText());
                if (store > 0) {
                    pro_size = store;
                }
                Color next=(Color)COLORPANEL.get(v.getProcessNumber()%COLORPANEL.size());
                if (v.fenpei(pro_name, pro_size)) {
                    v.get(v.getProcessNumber()-1).setColor(b0.getBackground());
                    this.mydraw();
                    JOptionPane.showMessageDialog(null, "恭喜你!添加成功!");
                     b0.setBackground(next);
                   // System.out.print("1 Free:" + v.getAllFree());

                } else {
                    JOptionPane.showMessageDialog(null, "对不起!此进程无法分配,内存空间不够!");
                }
            }
        } else if (source == b2) { //撤销进程
            if (table1.getSelectedRow() != -1) {

                v.huishou(v.get(table1.getSelectedRow()));
                this.mydraw();
                JOptionPane.showMessageDialog(null, "恭喜!撤消成功");
                System.out.print("2 Free:" + v.getAllFree());
            }
        } else if (source == b3) { //全部撤销
            v.delAllProcess();
            this.mydraw();
            JOptionPane.showMessageDialog(null, "恭喜!全部撤消成功.");
            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    dispose();
                }
            });
        } else if (source == b4) { //重置
            t.setText("");
            t.setEditable(true);
            b.setEnabled(true);
            b1.setEnabled(false);
            b2.setEnabled(false);
            b3.setEnabled(false);
            t1.setText("");
            t2.setText("");
            t1.setEnabled(false);
            t2.setEnabled(false);

            v.delAllProcess();
            this.mydraw();

        } else if (source == b5) { //正常关闭框架
            dispose();
            System.exit(0);
        }
    }

    private void mydraw() {
        rs = new Rectangle2D[v.getMemory().length];
        cs = new Color[rs.length];

        P3.setBackground(Color.black);
        P3.setSize(320, 400);

        rs[0] = new Rectangle(LEFT, H, W, H);
        System.out.println(rs[0].OUT_BOTTOM);
        System.out.println(H);
        for (int i = 1; i < rs.length; i++) {

            rs[i] = new Rectangle(LEFT, i * H + 1, W, H);

        }

        if (v.getProcessNumber() == 0) { //无进程时
            for (int i = 0; i < data1.length; i++) {
                data1[i][0] = "";
                data1[i][1] = "";
                data1[i][2] = "";
                data1[i][3] = "";

            }
            for (int i = 1; i < data2.length; i++) {
                data2[i][0] = "";
                data2[i][1] = "";
                data2[i][2] = "";

                data2[i][3] = "";

            }

            data2[0][0] = "0";
            data2[0][1] = "" + v.getFreeByOrder(0).getSize();
            data2[0][2] = "" + v.getFreeByOrder(0).getStart();
            int t = Integer.parseInt(data2[0][1].toString()) +
                    Integer.parseInt(data2[0][2].toString()) -
                    1;
            data2[0][3] = "" + t;
            ////////////////////////////
            for (int i = 0; i < cs.length; i++) {
                cs[i] = Color.white;
            } //当无进程时,全部白色
            //////////////////////////
            b0.setBackground((Color)COLORPANEL.get(0));
            table1.repaint();
            table2.repaint();
            DrawPanel.set(rs, cs);

            P3.repaint();
            this.repaint();

        } else {
            for (int i = 0; i < v.getProcessNumber(); i++) {
                String name, sizes, addressUps, addressDowns;
                int size, addressUp, addressDown;
                name = v.get(i).getName();
                size = v.get(i).getSize();
                addressUp = v.get(i).getStart();
                addressDown = v.get(i).getEnd();
                for (int j = addressUp; j < addressDown; j++) { ////////////////////////////
                    cs[j] = v.get(i).getColor();
                } ///////////////////////////////////////////////////////
                sizes = "" + size;
                addressUps = "" + addressUp;
                addressDowns = "" + addressDown;
                data1[i][0] = name;
                data1[i][1] = size;
                data1[i][2] = addressUp;
                data1[i][3] = addressDown;
            }
            for (int i = v.getProcessNumber(); i < data1.length; i++) {
                data1[i][0] = "";
                data1[i][1] = "";
                data1[i][2] = "";
                data1[i][3] = "";
            }
            for (int j = 0; j < v.getFreeNumber(); j++) {
                String number, length, start, end;
                number = "" + j;
                length = "" + v.getFreeByOrder(j).getSize();
                start = "" + v.getFreeByOrder(j).getStart();
                int d = Integer.parseInt(start) +
                        Integer.parseInt(length) - 1;
                end = "" + d;
                data2[j][0] = number;
                data2[j][1] = length;
                data2[j][2] = start;
                data2[j][3] = end;
            }
            for (int i = v.getFreeNumber(); i < data1.length; i++) {
                data2[i][0] = "";
                data2[i][1] = "";
                data2[i][2] = "";
                data2[i][3] = "";
            }

            if (v.getFreeNumber() == 0) {
                for (int i = 0; i < data2.length; i++) {
                    data2[i][0] = "";
                    data2[i][1] = "";
                    data2[i][2] = "";

                    data2[i][3] = "";

                }

            }

            for (int i = 0; i < v.getMemory().length; i++) {
                if (v.getMemoryItem(i) != 1) {
                    cs[i] = Color.white;
                    System.out.println(i+"  "+v.getMemoryItem(i));
                }

            }

            table1.repaint();
            table2.repaint();
            DrawPanel.set(rs, cs);

            P3.repaint();
            this.repaint();
        }
    }

    private int W = 400, H = 1, LEFT = 35;
}


class DrawPanel extends JPanel { //画图子类
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2 = (Graphics2D) g;
        for (int i = 0; i < RECTS.length; i++) {
            // g.setPaint(Color.BLACK);
            //System.out.println(i+"   "+RECTS[i].getBounds());
            //g2.draw(RECTS[i]);
            g2.setPaint(COLORS[i]);
            g2.fill(RECTS[i]);
        }
    }

    public static void set(Rectangle2D[] rs, Color[] cs) {
        RECTS = rs;
        COLORS = cs;
    }

    private static Rectangle2D[] RECTS;
    private static Color[] COLORS;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -