📄 window.java
字号:
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 + -