📄 window.java
字号:
import java.io.*;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import javax.swing.*;
import java.awt.event.*;
import java.util.ArrayList;
public class window extends JFrame implements ActionListener, FocusListener {
void buildConstraints(GridBagConstraints g, int gx, int gy, int gw, int gh,
int wx, int wy) {
g.gridx = gx;
g.gridy = gy;
g.gridwidth = gw;
g.gridheight = gh;
g.weightx = wx;
g.weighty = wy;
}
visual v = new visual(true, 400);
Color[] cs;
Rectangle2D[] rs;
java.util.ArrayList COLORPANEL;
DrawPanel P3 = new DrawPanel(); //选项卡的第三个面板,画图面板.自定义类对象
// JFrame f=new JFrame();
//定义面板
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
//定义菜单
JMenuBar menuBar = new JMenuBar();
JMenu fz = new JMenu("算法设置(ALT+S)");
JMenu ws = new JMenu("初始和重置(ALT+F)");
JMenu wc = new JMenu("操作(ALT+C)");
JMenu tc = new JMenu("关于(ALT+A)");
JMenuItem fz_1 = new JMenuItem("搬家算法");
JMenuItem fz_2 = new JMenuItem("不搬家算法");
JMenuItem ws_1 = new JMenuItem("初始");
JMenuItem ws_2 = new JMenuItem("重置");
JMenuItem ws_3 = new JMenuItem("退出");
JMenuItem wc_1 = new JMenuItem("设置内存大小");
JMenuItem wc_2 = new JMenuItem("添加进程");
JMenuItem wc_3 = new JMenuItem("撤消进程");
JMenuItem wc_4 = new JMenuItem("撤消所有进程");
JMenuItem tc_1 = new JMenuItem("详细说明");
//定义选项卡面板
JTabbedPane jtp = new JTabbedPane();
JPanel xPanel = new JPanel();
JPanel yPanel = new JPanel();
JPanel zPanel = new JPanel();
final String[] colHeads1 = {"进程名", "所占空间大小", "所占地址下界", "所占地址上界"};
Object[][] data1 = new Object[50][4];
JTable table1 = new JTable(data1, colHeads1);
final String[] colHeads2 = {"空闲块号", "块长度", "地址下界", "地址上界"};
Object[][] data2 = new Object[50][4];
JTable table2 = new JTable(data2, colHeads2);
JLabel l1 = new JLabel("0KB");
JLabel l2 = new JLabel("400KB");
JTextField ttt[] = new JTextField[400];
JPanel pp = new JPanel();
JScrollPane jsp3;
/*
final String[] colHeads3 = {""};
Object[][] data3 = new Object[400][1];
JTable table3 = new JTable(data3, colHeads3);*/
//定义p2面板中的内容
//设定算法
JLabel s = new JLabel("~~***算法***~~");
JRadioButton s1 = new JRadioButton("搬家算法");
JRadioButton s2 = new JRadioButton("不搬家算法");
//设定内存
JLabel s3 = new JLabel("~~***设定内存大小***~~");
JTextField t = new JTextField(5);
JLabel s4 = new JLabel("KB");
JButton b = new JButton("确定内存大小");
//分配、回收
JLabel f = new JLabel("~~***分配与回收进程空间***~~");
JLabel f1 = new JLabel("进程名");
JLabel f2 = new JLabel("进程大小");
JLabel f3 = new JLabel("进程颜色代表");
JLabel f4 = new JLabel("KB");
JTextField t1 = new JTextField(5);
JTextField t2 = new JTextField(5);
JButton b0 = new JButton(" ");
JButton b1 = new JButton("添加进程");
JButton b2 = new JButton("撤消进程");
JButton b3 = new JButton("撤消所有进程");
//重置和推出
JLabel f5 = new JLabel("~~***重置和退出***~~");
JButton b4 = new JButton("重置");
JButton b5 = new JButton("退出");
////////////////////////////////////////////构造函数//////////////////////////////////
window() {
super("可变分区存储管理模拟");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
super.setSize(700, 700);
this.setResizable(false);
COLORPANEL=new ArrayList();
COLORPANEL.add(Color.yellow);
COLORPANEL.add(Color.RED);
COLORPANEL.add(Color.PINK);
COLORPANEL.add(Color.orange);
COLORPANEL.add(Color.MAGENTA);
COLORPANEL.add(Color.LIGHT_GRAY);
COLORPANEL.add(Color.GREEN);
COLORPANEL.add(Color.GRAY);
COLORPANEL.add(Color.CYAN);
COLORPANEL.add(Color.DARK_GRAY);
COLORPANEL.add(Color.blue);
//p1面板为最大的面板,包括菜单栏、选项卡窗格、和P2面板。且采用边框布局
p1.setLayout(new BorderLayout());
p1.add("North", menuBar);
p1.add("West", jtp);
p1.add("East", p2);
//菜单
setJMenuBar(menuBar);
fz.setMnemonic('S');
ws.setMnemonic('F');
wc.setMnemonic('C');
tc.setMnemonic('A');
menuBar.add(fz);
menuBar.add(ws);
menuBar.add(wc);
menuBar.add(tc);
fz.add(fz_1);
fz_1.addActionListener(this);
fz.addSeparator(); //分隔副
fz.add(fz_2);
fz_2.addActionListener(this);
ws.add(ws_1);
ws_1.addActionListener(this);
ws.addSeparator();
ws.add(ws_2);
ws_2.addActionListener(this);
ws.addSeparator();
ws.add(ws_3);
ws_3.addActionListener(this);
wc.add(wc_1);
wc_1.addActionListener(this);
wc.addSeparator();
wc.add(wc_2);
wc_2.addActionListener(this);
wc.addSeparator();
wc.add(wc_3);
wc_3.addActionListener(this);
wc.addSeparator();
wc.add(wc_4);
wc_4.addActionListener(this);
tc.add(tc_1);
tc_1.addActionListener(this);
//选项卡窗格
jtp.addTab("进程", xPanel);
jtp.addTab("空闲区", yPanel);
jtp.addTab("内存状态图示", zPanel);
//////进程面板///////////////
xPanel.setLayout(new BorderLayout());
int v1 = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
int h1 = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
table1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table1.addFocusListener(this);
JScrollPane jsp1 = new JScrollPane(table1, v1, h1);
xPanel.add(jsp1, BorderLayout.CENTER);
//////空闲区面板////////////
yPanel.setLayout(new BorderLayout());
int v2 = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
int h2 = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
JScrollPane jsp2 = new JScrollPane(table2, v2, h2);
yPanel.add(jsp2, BorderLayout.CENTER);
/////内存状态图////////////
zPanel.setLayout(new BorderLayout());
int v3 = ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS;
int h3 = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS;
/////////////////////////////////////////////////////////////////////////
//jsp3 = new JScrollPane(P3, v3, h3);
///////////////////////////////////////////////////////
zPanel.add(l1, BorderLayout.NORTH);
zPanel.add(l2, BorderLayout.SOUTH);
zPanel.add(P3, BorderLayout.CENTER);
//p2面板 采用网格袋布局
// p2.setSize(50,450);
GridBagLayout g = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
p2.setLayout(g);
/////算法////
buildConstraints(c, 0, 0, 3, 1, 20, 5);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.WEST;
g.setConstraints(s, c);
p2.add(s);
buildConstraints(c, 0, 1, 1, 1, 20, 5);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.WEST;
g.setConstraints(s1, c);
s1.addActionListener(this);
s1.setSelected(true);
p2.add(s1);
buildConstraints(c, 0, 2, 1, 1, 0, 5);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.WEST;
g.setConstraints(s2, c);
s2.addActionListener(this);
p2.add(s2);
ButtonGroup bg = new ButtonGroup();
bg.add(s1);
bg.add(s2);
////设定内存/////////////////
buildConstraints(c, 0, 3, 1, 1, 0, 5);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.WEST;
g.setConstraints(s3, c);
p2.add(s3);
buildConstraints(c, 0, 4, 2, 1, 0, 0);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.CENTER;
g.setConstraints(t, c);
t.addActionListener(this);
t.setText("400");
t.setEditable(false);
p2.add(t);
buildConstraints(c, 1, 4, 1, 1, 30, 5);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.WEST;
g.setConstraints(s4, c);
p2.add(s4);
buildConstraints(c, 0, 5, 1, 1, 0, 5);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.CENTER;
g.setConstraints(b, c);
b.addActionListener(this);
b.setEnabled(false);
p2.add(b);
////分配和回收///////////////
buildConstraints(c, 0, 6, 3, 1, 0, 5);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.WEST;
g.setConstraints(f, c);
p2.add(f);
buildConstraints(c, 0, 7, 1, 1, 0, 0);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.CENTER;
g.setConstraints(f1, c);
p2.add(f1);
buildConstraints(c, 1, 7, 1, 1, 0, 5);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.WEST;
g.setConstraints(t1, c);
t1.addActionListener(this);
p2.add(t1);
buildConstraints(c, 0, 8, 1, 1, 0, 0);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.CENTER;
g.setConstraints(f2, c);
p2.add(f2);
buildConstraints(c, 1, 8, 1, 1, 0, 0);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.WEST;
g.setConstraints(t2, c);
t2.addActionListener(this);
p2.add(t2);
buildConstraints(c, 2, 8, 1, 1, 0, 5);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.WEST;
g.setConstraints(f4, c);
p2.add(f4);
buildConstraints(c, 0, 9, 1, 1, 0, 0);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.CENTER;
g.setConstraints(f3, c);
p2.add(f3);
buildConstraints(c, 1, 9, 1, 1, 0, 5);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.WEST;
g.setConstraints(b0, c);
b0.setBackground((Color)COLORPANEL.get(0)); /////////////////////////////////////////////
p2.add(b0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -