📄 drowmemorychangepanel.java
字号:
package com.ysu.cwy;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;
public class DrowMemoryChangePanel extends JPanel {
private static final long serialVersionUID = 1L;
List<MemoryBlock> memoryFreeBlockList = null; //内存空闲链表
List<MemoryBlock> memoryBlockInUseList = null; //内存使用链表
MemoryInit memoryInit = null; //内存初始化对象
//构造函数
public DrowMemoryChangePanel(List<MemoryBlock> memoryFreeBlockList,
List<MemoryBlock> memoryBlockInUseList, MemoryInit memoryInit) {
super();
this.memoryFreeBlockList = memoryFreeBlockList;
this.memoryBlockInUseList = memoryBlockInUseList;
this.memoryInit = memoryInit;
}//end method DrowMemoryChangePanel
/**
* @function 进行画内存状态
*/
@Override
protected void paintComponent(Graphics g) {
Rect rect1 = new Rect(160, 80, 60, 20);
Rect rect2 = new Rect(160, 140, 60, 20);
Rect rect3 = new Rect(160, 220, 60, 20);
CalculateRect cr = new CalculateRect(memoryInit, 650);
List<MemoryBlock> list = allBlockInOrder();
for (int i = 0; i < list.size(); i++) {
MemoryBlock memoryBlock = list.get(i);
Rect rect = cr.calculateRect(memoryBlock);
if (memoryBlock.getBlockStatus()) {
DrawUsedFillRect(rect, g);
int x = rect.getX() + rect.getWidth() / 2 - rect.getWidth() / 4;
int y = rect.getY() + rect.getHighth() / 2 + 7;
g.setColor(Color.black);
Font font = new Font("Monospaced", Font.PLAIN, 14);
g.setFont(font);
g.drawString(String.valueOf(memoryBlock.getProcessId()) + "("
+ String.valueOf(memoryBlock.getBlockSize()) + ")", x,
y);
} else {
DrawFreeFillRect(rect, g);
}
myDrawRect(rect, g, memoryBlock);
}
Font font = new Font("Monospaced", Font.PLAIN, 12);
g.setFont(font);
DrawFreeFillRect(rect2, g);
g.drawString("未使用的内存", rect2.getX() - 4, rect2.getY()
+ rect2.getHighth() + 14);
g.setColor(Color.green);
DrawUsedFillRect(rect1, g);
g.drawString("被使用的内存", rect1.getX() - 4, rect1.getY()
+ rect1.getHighth() + 14);
g.setColor(Color.black);
g.drawString("XXXX(XXXX)", rect3.getX(), rect3.getY());
DrawLine(rect3.getX(), rect3.getY() + 2, 20, g, "进程号");
DrawLine(rect3.getX() + 30, rect3.getY() + 2, 40, g, "占用内存");
}//end method paintComponent
/**
* @function 画矩形的边框
* @param rect 矩形
* @param g Graphics对象
* @param block 矩形所代表的内存块
*/
public void myDrawRect(Rect rect, Graphics g, MemoryBlock block) {
Font font = new Font("Monospaced", Font.PLAIN, 11);
g.setColor(Color.BLUE);
g.setFont(font);
g.drawRect(rect.getX(), rect.getY(), rect.getWidth(), rect.getHighth());
g.drawString(String.valueOf(block.getBlockStartPlace()), rect.getX()
+ rect.getWidth() + 4, rect.getY() + 7);
g.drawString(String.valueOf(block.getBlockEndPlace()), rect.getX()
+ rect.getWidth() + 4, rect.getY() + rect.getHighth());
}//end method myDrawRect
/**
* @function 画被使用内存块的矩形
* @param rect 要画的矩形
* @param g Graphics对象
*/
public void DrawUsedFillRect(Rect rect, Graphics g) {
g.setColor(Color.green);
g.fillRect(rect.getX(), rect.getY(), rect.getWidth(), rect.getHighth());
}//end method DrawUsedFillRect
/**
* @function 画没有使用内存块的矩形
* @param rect 要画的矩形
* @param g Graphics对象
*/
public void DrawFreeFillRect(Rect rect, Graphics g) {
g.setColor(Color.red);
g.fillRect(rect.getX(), rect.getY(), rect.getWidth(), rect.getHighth());
}//end method DrawFreeFillRect
/**
* @function 对空闲链表和使用链表中的内存块按地址递增排序
* @return 排好序的链表
*/
public List<MemoryBlock> allBlockInOrder() {
int blockSize = 0;
int startPlace = 0;
int allBlockSize = memoryFreeBlockList.size()
+ memoryBlockInUseList.size();
MemoryBlock block = null;
List<MemoryBlock> list = new ArrayList<MemoryBlock>();
while (true) {
for (int i = 0; i < memoryFreeBlockList.size(); i++) {
block = memoryFreeBlockList.get(i);
if (block.getBlockStartPlace() == startPlace) {
list.add(block);
startPlace = block.getBlockEndPlace() + 1;
blockSize++;
break;
}
}
for (int i = 0; i < memoryBlockInUseList.size(); i++) {
block = memoryBlockInUseList.get(i);
if (block.getBlockStartPlace() == startPlace) {
list.add(block);
startPlace = block.getBlockEndPlace() + 1;
blockSize++;
break;
}
}
if (blockSize == allBlockSize) {
break;
}
}
return list;
}//end method allBlockInOrder
/**
* @function 画丁字形图画并显示字符串
* @param x 左上角x坐标
* @param y 左上角y坐标
* @param dy y轴增量
* @param g Graphics对象
* @param str 要显示的字符串
*/
public void DrawLine(int x, int y, int dy, Graphics g, String str) {
g.setColor(Color.black);
g.drawLine(x, y, x + 22, y);
g.drawLine(x + 11, y, x + 11, y + dy);
g.drawString(str, x - 10, y + dy + 12);
}//end method DrawLine
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -