package pageReplace;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.ImageObserver;
import java.text.AttributedCharacterIterator;
import javax.swing.*;
public class PageReplacePanel extends JPanel implements ActionListener,Runnable
{
private int x0=70,y0=70;
private int stringStart_x,stringStart_y; //字串的起始位置
private int length=0; //頁面陣列的長度
private int index;
private FIFO fifo; //先進先出類的物件
private JTextField pageNum;
private Thread panelThread;
private JButton fifoButton;
public PageReplacePanel()
{
JLabel label=new JLabel("頁面數量:");
pageNum=new JTextField(10);
fifoButton=new JButton("FIFO頁面置換演算法");
this.add(label);
this.add(pageNum);
this.add(fifoButton);
fifoButton.addActionListener(this);
fifo=new FIFO();
index=0;
}
public void paint(Graphics g)
{
super.paint(g);
for(int i=0;i<length+1;i++)
g.drawLine(x0+i*30, y0, x0+i*30, y0+60);
for(int j=0;j<4;j++)
g.drawLine(x0, y0+j*20, x0+length*30, y0+j*20);
}
public String getRandom()
{
int max=10;
int min =1;
return (int)(min+Math.random()*(max-min+1))+"";
}
@Override
public void run() {
// TODO Auto-generated method stub
length=fifo.getInputpageLength();
fifo.setTime(0);
this.repaint(x0,y0,600,400);
while(index<length)
{
fifo.doFIFO(index);
this.getGraphics().drawString(fifo.getOutString(), stringStart_x, stringStart_y-20);
for(int j=0;j<fifo.getFifoLinkedList().size();j++)
this.getGraphics().drawString(fifo.getFifoLinkedList().get(j), stringStart_x, stringStart_y+j*20);
if(fifo.getIsHit())
this.getGraphics().drawString("√",stringStart_x-5, stringStart_y+60);
index++;
stringStart_x+=30;
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
}
this.getGraphics().drawString("命中次數:"+fifo.getTime()+"命中率為:"+fifo.getTime()/length,300,300);
}
@Override
public void actionPerformed(ActionEvent e) {
int num;
try {
num=Integer.parseInt(pageNum.getText().toString());
} catch (NumberFormatException exception) {
num=15;
}
if(num>15)
num=15;
String []page=new String[num];
for(int i=0;i<num;i++)
{
page[i]=getRandom();
System.out.print(page[i]+" ");
}
System.out.println();
fifo.setInputpage(page);
if(e.getSource()==fifoButton)
{
fifo.setOutString("");
stringStart_x=85;
stringStart_y=85;
index=0;
panelThread=new Thread(this);
panelThread.start();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/234019.html
標籤:Eclipse
上一篇:Java問題-Java設計個按鈕,然后按按鈕,轉到另一個界面
下一篇:SpringToolSuite4 IDE中Configure Working Sets有三個Other Projects問題
