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

📄 bank.java

📁 操作系统银行家算法模拟 模拟银行家算法
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package bankPackage;
import java.awt.*;
import java.awt.List;
import java.awt.event.*;

import javax.swing.*;
import java.util.*;
import javax.swing.table.*;
public class bank extends JFrame implements ActionListener{
     
	 String string;
	 JTextField requestAlternate;
	 int repuestAlternate;
     JTextField proceNumberText,sourceNumberText;
     int proceNumber,sourceNumber;
     JTextField maxTextField[];
     int max[][];
     JTextField AllocationTextField[];
     int allocation[][];
     JTextField requestTextField;
     int request[];
     JTextField needJTextField;
     int need[][];
     JTextField systemJTextField;
     int system[],systemF[];
     JPanel MaxPanel,AllocationPanel;
     JButton firstFrameSureButton,secondFrameSureButton,nextButton,resultButton,frame3Button,testButton;
     JFrame firstFrame,secondFrame,thirdFrame;
     JTable table;
     Vector rowData,columnNames,vectorAll[],vectorAllF;
     static int finall=0;
     int Process[];
     DefaultTableModel modle;
     JPanel rightPanel,leftPanel,thirdPanel2;
     JList list;
     JLabel label1;
     public bank()
     {
    	 //主窗口
    	 firstFrame=new JFrame("银行家算法的模拟");
    	 Container c=firstFrame.getContentPane();
    	 c.setLayout(new GridLayout(6,1));
    	 
    	 //创建第一个面板
    	 JPanel panel1=new JPanel(new FlowLayout());
    	 requestTextField=new JTextField(10);
    	 systemJTextField=new JTextField(10);
    	 requestAlternate=new JTextField(10); 
    	 //creat logopanel
    	 JPanel logoPanel=new JPanel(new FlowLayout());
    	 Icon icon=new ImageIcon("E:/myjava/bank.JPG");
    	 JLabel logoLabel=new JLabel(icon);///////////////////////
         logoPanel.add(logoLabel);
         c.add(logoPanel);
         //creat panel
    	 JLabel l1=new JLabel("     request 矩阵: ");
    	 panel1.add(l1);
    	 panel1.add(requestTextField);
    	 panel1.add(new JLabel("     请求进程:"));
    	 panel1.add(requestAlternate);
    	 JLabel l2=new JLabel("     system 矩阵: ");
    	 panel1.add(l2);
    	 panel1.add(systemJTextField); 
    	 panel1.setBorder(BorderFactory.createLineBorder(Color.darkGray));
    	 //creat new panel
    	 JPanel panelMaxAndAllocation=new JPanel(new GridLayout(1,2));
    	 JLabel l3=new JLabel("MAX 矩阵:");
    	 panelMaxAndAllocation.add(l3);
    	 JLabel l4=new JLabel("Allocation 矩阵");
    	 panelMaxAndAllocation.add(l4);
    	 c.add(panel1);
    	 c.add(panelMaxAndAllocation);
    	 
    	 //将第二个面板加入
    	 JPanel panel2=new JPanel(new GridLayout(1,2));
    	 panel2.setBorder(BorderFactory.createLineBorder(Color.darkGray));
    	 leftPanel=new JPanel();
    	 rightPanel=new JPanel();
    	 leftPanel.setBorder(BorderFactory.createLineBorder(Color.darkGray));
    	 panel2.add(leftPanel);
    	 rightPanel.setBorder(BorderFactory.createLineBorder(Color.darkGray));
    	 panel2.add(rightPanel);
    	 c.add(panel2);
    	 
    	 //构建带有滚动条的panel
 		 rowData=new Vector(100);
		 columnNames=new Vector(100);
			vectorAllF=new Vector();
	     columnNames.addElement("进程/资源情况");
		 columnNames.addElement("Max");
		 columnNames.addElement("Allocation");
		 columnNames.addElement("Need");
		 columnNames.addElement("Available");
		 modle= new DefaultTableModel(rowData,columnNames);
		 table=new JTable(modle);
		 table.setFont(new Font("TimeRoman",Font.ITALIC,17));
		 table.setForeground(Color.darkGray);
		 table.setRowHeight(25);
		 JScrollPane panel3 = new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		 panel3.setBorder(BorderFactory.createLineBorder(Color.darkGray));
		 c.add(panel3);
		 
		 //creat buttonPanel
		 firstFrameSureButton=new JButton("确  定");
		 firstFrameSureButton.addActionListener(this);
		 firstFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		 firstFrameSureButton.setFont(new Font("TimeRoman",Font.ITALIC,20));
		 nextButton=new JButton("N E X T");
		 nextButton.setFont(new Font("TimeRoman",Font.ITALIC,20));
		 resultButton=new JButton("显  示");
		 
		 testButton=new JButton("T E S T");
		 testButton.setFont(new Font("TimeRoman",Font.ITALIC,20));
		 testButton.addActionListener(this);
		 
		 resultButton.setFont(new Font("TimeRoman",Font.ITALIC,20));
		 JPanel panel4=new JPanel(new FlowLayout());
		 panel4.add(firstFrameSureButton);
		 panel4.add(new JLabel("             "));
		// panel4.add(nextButton);
		 //panel4.add(new JLabel("             "));
		 panel4.add(testButton);
		 panel4.add(new JLabel("             "));
		 panel4.add(resultButton);
		 nextButton.addActionListener(this);
		 resultButton.addActionListener(this);
		 c.add(panel4);
		 // 显示窗口
		 Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize(); 
		 firstFrame.setSize(800,600);
		 firstFrame.setLocation( screenSize.width/2-(400),screenSize.height/2-(300));
		 //firstFrame.setResizable(false);
		 // 次窗口
		 
    	 secondFrame=new JFrame("proceNum/SourceNum");
    	 secondFrame.setLayout(new FlowLayout());
    	 proceNumberText=new JTextField(10);
    	 sourceNumberText=new JTextField(10);
    	 secondFrame.add(new JLabel("进程个数:  "));
    	 secondFrame.add(proceNumberText);
    	 secondFrame.add(new JLabel("资源个数:  "));
    	 secondFrame.add(sourceNumberText);
    	 secondFrameSureButton=new JButton("确   定");
    	 secondFrameSureButton.addActionListener(this);
    	 secondFrame.add(secondFrameSureButton);
    	 secondFrame.setSize(200,180);
    	 secondFrame.setLocation( screenSize.width/2-(100),screenSize.height/2-(80));
    	 secondFrame.setVisible(true);
    	 //creat frame3
    	 thirdFrame=new JFrame("安全序列");
    	 Container b=thirdFrame.getContentPane();
    	 b.setLayout(new GridLayout(3,1));
    	 
    	 JPanel thirdPanel1=new JPanel(new FlowLayout());
    	 thirdPanel2=new JPanel(new GridLayout(1,2));
    	 JPanel thirdPanel3=new JPanel(new FlowLayout());
    	 //creat panel1
    	 JLabel label=new JLabel("安 全 序 列",SwingConstants.CENTER);
    	 label.setForeground(Color.RED);
    	 label.setFont(new Font("TimeRoman",Font.ITALIC,30));
    	 thirdPanel1.add(label);
         b.add(thirdPanel1);
         //creat panel2
    	 label1=new JLabel("安全序列",SwingConstants.CENTER);
    	 thirdPanel2.add(label1);
    	 b.add(thirdPanel2);
    	 //creat panel3
    	 frame3Button=new JButton("确定");
    	 thirdPanel3.add(frame3Button);
    	 frame3Button.addActionListener(this);
    	 b.add(thirdPanel3);
    	 //显示panel3
    	 thirdFrame.setSize(300,180);
    	 thirdFrame.setLocation( screenSize.width/2-(150),screenSize.height/2-(80));    	 
     }
	public static void main(String[] args) {
		
                new bank();
	}
	//的到请求矩阵以及系统当前的资源数目
	public void getRequestNumber(String a,int b[])
	{
		for(int i=0;i<a.length();i++)
		{
			b[i]=Integer.parseInt(a.substring(i, i+1));
		}
	}
	//得到max和allocation的具体数值,并且把它们存在数组里面
	public void getMaxAndAllocation()
	{
		int field=0;
		max=new int[proceNumber][sourceNumber];
		allocation=new int[proceNumber][sourceNumber];
		need=new int[proceNumber][sourceNumber];
		request=new int[sourceNumber];
		system=new int[sourceNumber];
		systemF=new int[sourceNumber];
		for(int i=0;i<max.length;i++)
			for(int j=0;j<max[i].length;j++)
		{
			max[i][j]=Integer.parseInt(maxTextField[field].getText());
			allocation[i][j]=Integer.parseInt(AllocationTextField[field].getText());
			need[i][j]=max[i][j]-allocation[i][j];
			field++;
		}
	}
	//构造max和allocation的面板
	public void setMax()
	{
		leftPanel.setLayout(new GridLayout(proceNumber,sourceNumber*2));
		rightPanel.setLayout(new GridLayout(proceNumber,sourceNumber*2));
		maxTextField= new JTextField[proceNumber*sourceNumber]; 
		AllocationTextField=new JTextField[proceNumber*sourceNumber];
		for(int j=0;j<maxTextField.length;j++)
		{
			maxTextField[j]=new JTextField(1);
			AllocationTextField[j]=new JTextField(1);
		}
		for(int j=0;j<maxTextField.length;j++)
		{
			leftPanel.add(maxTextField[j]);
			leftPanel.add(new JLabel(" "));
			rightPanel.add(AllocationTextField[j]);
			rightPanel.add(new JLabel("     "));
		}
	}
	//向table里面添加数据
	public void addNum()
	{
		String maxString=" ",allocationString=" ",
		needString=" ",requestString=" ",systemString=" ";
		for(int i=0;i<request.length;i++)
		{
			requestString=requestString+request[i]+" ";
			systemString=systemString+system[i]+" ";
		}
		for(int i=0;i<max.length;i++)
		{
			for(int j=0;j<max[i].length;j++)
			{
					maxString=maxString+max[i][j]+" ";
					allocationString=allocationString+allocation[i][j]+" ";
					needString=needString+need[i][j]+" ";

			}
			if(i==0)
			{
			Object date[]={
				1,maxString,allocationString,needString,systemString	
			};
			modle.addRow(date);
			}
			if(i>0)
			{
				Object date[]={
						i+1,maxString,allocationString,needString	
					};
					modle.addRow(date);				
			}
			maxString=" ";
			allocationString=" ";
			needString=" ";			
		}
	}
	public void Remove()//移除原有的,用于刷新表格 不知道为什么总是有越界的错误
   	{
   		int j= modle.getRowCount();
   		
   		do{
   			modle.removeRow(j-1);
   			j--;
   		  }while(modle.getRowCount()!=0);
   		
   	}
	//得到要处理的字符串
	public void Process(int Process[])

⌨️ 快捷键说明

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