📄 desktop.java
字号:
/**************************************************
*功能描述: 挂起一个进程
***************************************************/
public void hangUPProcess()
{
DetailTableModel model = (DetailTableModel)PROC_table.getModel();
int[] selectcount = PROC_table.getSelectedRows();
if(selectcount.length!=0)
{
for(int i=0;i<selectcount.length;i++)
{
String state = model.getValueAt(selectcount[i],1).toString();
if(state.equals("运行")||state.equals("就绪"))
{
String Sid = model.getValueAt(selectcount[i],0).toString();
int id = Integer.parseInt(Sid);
CPUM.runToHangUP(id);
PROC_table.setValue(selectcount[i],1,"挂起");
}//end if
else
{
//选中项已经处于挂起状态
}//end else
}//end for
}//end if
else
{
//在列表中没有选中某一项
}//end else
}
/************************************************
*功能描述: 唤醒进程
************************************************/
public void hangUPToRun()
{
DetailTableModel model = (DetailTableModel)PROC_table.getModel();
int[] selectcount = PROC_table.getSelectedRows();
if(selectcount.length!=0)
{
for(int i=0;i<selectcount.length;i++)
{
String state = model.getValueAt(selectcount[i],1).toString();
if(state.equals("挂起"))
{
String Sid = model.getValueAt(selectcount[i],0).toString();
int id = Integer.parseInt(Sid);
CPUM.hangUPToRun(id);
PROC_table.setValue(selectcount[i],1,"就绪");
}//end if
else
{
//选中项不处于挂起状态
}//end else
}//end for
}//end if
else
{
//在列表中没有选中某一项
}//end else
}
/***********************************************************
*功能描述: 结束进程
************************************************************/
public void stopProcess()
{
DetailTableModel model = (DetailTableModel)PROC_table.getModel();
int[] selectcount = PROC_table.getSelectedRows();
if(selectcount.length!=0)
{
for(int i=0;i<selectcount.length;i++)
{
String state = model.getValueAt(selectcount[i],1).toString();
if(state.equals("就绪"))
{
String Sid = model.getValueAt(selectcount[i],0).toString();
int id = Integer.parseInt(Sid);
//CPUM.hangUPToRun(id);
//PROC_table.setValue(selectcount[i],1,"就绪");
removeProcess(id);
Global.PCBLIST.Remove(id);
MM.Delete(id);
}//end if
else
{
//选中项不处于挂起状态
}//end else
}//end for
}//end if
else
{
//在列表中没有选中某一项
}//end else
}
/**********************************************************
*功能描述:获取进程列表中选中的记录序号
***********************************************************/
public int[] getCountsOfProc()
{
DetailTableModel model = (DetailTableModel)PROC_table.getModel();
int[] selectcount = PROC_table.getSelectedRows();
return selectcount;
}
/******************************************
*功能描述:设置进程的优先级别
*参数说明:priority:优先级(0,1,2,3,4)
********************************************/
public void setPriority(int priority)
{
//PROC_selectcounts
DetailTableModel model = (DetailTableModel)PROC_table.getModel();
if(PROC_selectcounts.length!=0)
{
for(int i=0;i<PROC_selectcounts.length;i++)
{
String Sid = model.getValueAt(PROC_selectcounts[i],0).toString();
String state= model.getValueAt(PROC_selectcounts[i],1).toString();
int id = Integer.parseInt(Sid);
if(state.equals("运行")||state.equals("就绪"))
{
Global.PCBLIST.setValue(id,2,priority);
PROC_table.setValue(PROC_selectcounts[i],2,""+Global.PCBLIST.getValue(id,2));
}
else if(state.equals("挂起"))
{
Global.PCBINTERUPT.setValue(id,2,priority);
PROC_table.setValue(PROC_selectcounts[i],2,""+Global.PCBINTERUPT.getValue(id,2));
}
else if(state.equals("等待"))
{
Global.PCBWAITLIST.setValue(id,2,priority);
PROC_table.setValue(PROC_selectcounts[i],2,""+Global.PCBWAITLIST.getValue(id,2));
}
}
}
}
/*****************************************************
*功能描述: 设置进程列表是否光标跟随
*****************************************************/
public void setFollow(boolean tf)
{
CPUManager.follow = tf;
}
/************************************************
*功能描述: 刷新虚拟内存
**************************************************/
public static void ReFlashTable()
{
VMEM_table.RemoveAll();
for(int i=0;i<Global.BLOCKS;i++)
{
for(int j=0;j<Global.PAGE_SIZE;j++)
{
String MemAddTem[] = new String[2];
MemAddTem[0] = ""+i+":"+j;
MemAddTem[1] = Global.MEMORY.getValue(i,j+1);
VMEM_table.addRow(MemAddTem);
}
}
//VMEM_table.setRowsBGColor(0,2,2);
}
/************************************************
*功能描述: 设置进程列表的某一行选中
*参数描述: 当前运行作业ID
**************************************************/
public static void PSSetSelectRow(int id)
{
int row = PROC_table.getIndex(id);
if(row<0||id==0)
row=0;
else
{
PROC_table.setRowSelectionInterval(row, row);
PSScrollToRow(row-2);
}
}
/**************************************************
*功能描述: 进程列表滚动条自动滚动
***************************************************/
public static void PSScrollToRow(int row)
{
if(row<0)
row = 0;
int value = PROC_table.getRowHeight()*row+1;
((JScrollPane)PROC_table.getParent().getParent()).getVerticalScrollBar().setValue(value);
}
/************************************************
*功能描述: 设置虚拟内存表的某一行选中
**************************************************/
public static void setSelectRow(int row)
{
VMEM_table.setRowSelectionInterval(row, row);
scrollToRow(row-5);
}
/**************************************************
*功能描述: 滚动条自动滚动
***************************************************/
public static void scrollToRow(int row)
{
if(row<0)
row = 0;
int value = VMEM_table.getRowHeight()*row+1;
((JScrollPane)VMEM_table.getParent().getParent()).getVerticalScrollBar().setValue(value);
}
/**************************************************
*功能描述: 在状态显示窗口显示文字
***************************************************/
public static void addTextToStateTextField(String s)
{
state_show.append(s);
}
/****************************************************
*功能描述: 设置内存TABLE里某一行到某一行的背景颜色
*参数说明: row1:起始行 row2:终止行 counts:TABLE和列数
*****************************************************/
public static void setMEMTableRowsBGColor(int row1,int row2,int counts)
{
VMEM_table.setRowsBGColor(row1,row2,counts);
}
/*****************************************************
*功能描述: 添加一条记录到进程表
******************************************************/
public static void addRowToProcessTable(String[] value)
{
PROC_table.addRow(value);
}
/*******************************************************
*功能描述: 设置进程的进度
*参数说明: id:作业ID value:作业当前运行到的地址
*******************************************************/
public static void setCellValueToProcessTable(int id,int value)
{
int row = PROC_table.getIndex(id);
int col = 3;
int percent = (value*100)/(Global.HDTABLE.getJobSize(id)-1);
String Svalue = ""+percent;
PROC_table.setValue(row,col,Svalue);
}
/*******************************************************
*功能描述: 设置进程的状态
*参数说明: id:作业ID value:进程的状态信息
*******************************************************/
public static void setCellValueToProcessTable(int id,String value)
{
int row = PROC_table.getIndex(id);
int col = 1;
PROC_table.setValue(row,col,value);
}
/*******************************************************
*功能描述: 从进程表中移除一条进程
*参数说明: id:作业ID
*******************************************************/
public static void removeProcess(int id)
{
int row = PROC_table.getIndex(id);
PROC_table.removeRow(row);
}
/*********************************************************
*功能描述: 显示内存使用量
*********************************************************/
public static void setMEMUsed(int used)
{
VMEM_ProcessBar.setValue(used);
}
/*********************************************************
*功能描述: 显示硬盘使用量
*********************************************************/
public static void setHDUsed()
{
int used=HDM.GetUsedSize();
VHD_ProcessBar.setValue(used);
}
/**************************************************
*功能描述: 在虚拟显示器窗口显示文字
***************************************************/
public static void addTextToScreenTextField(String s)
{
SCR_Screen.append(s);
}
public static void setVHDLabel(String s)
{
VHD_Label.setText(s);
}
public static void setVMEMLabel(String s)
{
VMEM_Label.setText(s);
}
//////////////////////////////////////////////////////////////////////////////////
public void valueChanged(TreeSelectionEvent e){
Object obj=tree.getLastSelectedPathComponent();
if(obj==null)return;
else detailTable.setParent(((FileNode)obj).getFile());
}
class MyTreeCellRenderer extends DefaultTreeCellRenderer {
public MyTreeCellRenderer() {}
public Component getTreeCellRendererComponent(JTree tree,Object value,
boolean sel,boolean expanded,boolean leaf,int row,boolean hasFocus) {
super.getTreeCellRendererComponent(tree,value,sel,expanded,leaf,row,hasFocus);
setIcon(fileSystemView.getSystemIcon(((FileNode)value).getFile()));
return this;
}
}
class MyExpandsionListener implements TreeExpansionListener {
public MyExpandsionListener() {}
public void treeExpanded(TreeExpansionEvent event) {
if (tree.getLastSelectedPathComponent()==null){return;}
tree.setCursor(new Cursor(Cursor.WAIT_CURSOR));
TreePath path = event.getPath();
FileNode node = (FileNode)path.getLastPathComponent();
node.explore();
treeModel.nodeStructureChanged(node);
tree.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
public void treeCollapsed(TreeExpansionEvent event) {}
}
class FileNode extends DefaultMutableTreeNode {
private boolean explored = false;
public FileNode(File file) { setUserObject(file); }
public boolean getAllowsChildren() { return isDirectory(); }
public boolean isLeaf() { return !isDirectory();}
public File getFile() { return (File)getUserObject(); }
public boolean isExplored() { return explored; }
public void setExplored(boolean b){ explored=b;}
public boolean isDirectory() { return getFile().isDirectory();}
public String toString() {
File file = (File)getUserObject();
String filename = file.toString();
int index = filename.lastIndexOf(File.separator);
return (index != -1 && index != filename.length()-1)
? filename.substring(index+1) : filename;
}
public void explore() {
if(!isExplored()) {
File file = getFile();
File[] children = file.listFiles();
if(children==null||children.length==0)return;
for(int i=0; i < children.length; ++i)
{
File f=children[i];
if(f.isDirectory())add(new FileNode(children[i]));
}
explored = true;
}
}
}
class DetailTable extends JTable{
DetailsTableModel model=new DetailsTableModel();
public DetailTable(){
setModel(model);
setShowGrid(false);
TableColumnModel colModel = getColumnModel();
for (int i=0;i<3;i++)
colModel.getColumn(i).setCellRenderer(new DetailsTableCellRenderer());
setRowHeight(18);
this.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
if(e.getClickCount()==2){
for (int i = 0; i <getRowCount(); i++) {
if(getCellRect(i,0,true).contains(e.getPoint())){
openSelect();
break;
}
}
}
}
});
}
public void openSelect(){
Object obj=model.getValueAt(getSelectedRow(),0);
if(obj==null)return;
File f=(File)obj;
if(f.isDirectory()){
//expand tree
setParent(f);
}else{
//open select file
}
}
public void setParent(File parent){
model.removeAllRows();
File list[]=parent.listFiles();
if(list==null)return;
Vector vDir=new Vector(),vFile=new Vector();
for (int i = 0; i < list.length; i++) {
if(list[i].isDirectory())vDir.add(list[i]);
else vFile.add(list[i]);
}
sortElements(vFile);
sortElements(vDir);
for (int i = 0; i < vDir.size(); i++)model.addFile((File)vDir.elementAt(i));
for (int i = 0; i < vFile.size(); i++)model.addFile((File)vFile.elementAt(i));
}
public void sortElements(Vector v)
{
for(int i=0;i<v.size();i++)
{
int k=i;
for(int j=i+1;j<v.size();j++){
File fa=(File)v.elementAt(j);
File fb=(File)v.elementAt(k);
if(fileSystemView.getSystemDisplayName(fa).toLowerCase().compareTo(
fileSystemView.getSystemDisplayName(fb).toLowerCase())<0)k=j;
}
if(k!=i)swap(k,i,v);
}
}
private void swap(int loc1,int loc2,Vector v){
Object tmp=v.elementAt(loc1);
v.setElementAt(v.elementAt(loc2),loc1);
v.setElementAt(tmp,loc2);
}
class DetailsTableModel extends DefaultTableModel {
public DetailsTableModel() {
addColumn("名称");
addColumn("大小");
addColumn("修改时间");
}
public void addFile(File f){
addRow(new Object[]{f,new Double(f.length()/1024),
new java.sql.Date(f.lastModified())});
}
public void removeAllRows(){
while(getRowCount()!=0) removeRow(0);
}
public boolean isCellEditable(int row, int column) {return false;}
}
class DetailsTableCellRenderer extends DefaultTableCellRenderer {
DetailsTableCellRenderer() {}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (column == 1){
setHorizontalAlignment(SwingConstants.TRAILING);
isSelected=hasFocus=false;
}else if(column==2){
setHorizontalAlignment(SwingConstants.CENTER);
isSelected=hasFocus=false;
}else setHorizontalAlignment(SwingConstants.LEADING);
return super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
}
public void setValue(Object value) {
setIcon(null);
if (value instanceof File) {
File file = (File)value;
setText(fileSystemView.getSystemDisplayName(file));
setIcon(fileSystemView.getSystemIcon(file));
}else{
super.setValue(value);
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -