📄 mainapplet.java
字号:
package josephus;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.awt.Rectangle;
import java.awt.Font;
import java.awt.BorderLayout;
import java.awt.LayoutManager;
import javax.swing.*;
import javax.swing.border.*;
import java.net.URL;
import java.awt.event.ActionEvent;
import javax.swing.Timer;
/**
* <p>Title: Josephus</p>
*
* <p>Description: This is a algorithm to display Josephus</p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: BHL</p>
*
* @author Linpeizhong
* @version 1.0
*/
/**
* 界面类,设计之初添加其为实现接口ActionListener,为定时器的实现做为前提
*/
public class MainApplet
extends Applet
implements ActionListener {
//声明定时器对象
javax.swing.Timer timer;
//定义测试对象数组
int n = 12;
int a[] = new int[n];
//初始密码
int cs = 20;
//标签数组
JLabel jLabels[] = new JLabel[n];
//密码标签
String strs[] = new String[n];
//是否独立运行
boolean isStandalone = false;
//布局管理器
BorderLayout borderLayout1 = new BorderLayout();
BorderLayout borderLayout2 = new BorderLayout();
BorderLayout borderLayout3 = new BorderLayout();
BorderLayout borderLayout5 = new BorderLayout();
BorderLayout borderLayout6 = new BorderLayout();
//面板
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
JPanel jPanel3 = new JPanel();
JPanel jPanel4 = new JPanel();
JPanel jPanel5 = new JPanel();
JPanel jPanel6 = new JPanel();
//边线
Border border1 = BorderFactory.createEtchedBorder(EtchedBorder.RAISED,Color.white, new Color(165, 163, 151));
Border border2 = new TitledBorder(border1, "演示窗口"); //Get a parameter value
Border border3;
Border border4;
Border border5;
Border border6;
Border border7;
//按钮
JButton jButton1 = new JButton();
// 设置为静态,供外部程序控制
static JButton jButton2 = new JButton();
JButton jButton4 = new JButton();
//声明组件,加载相关图片
Image images[];
JLabel jLabel3;
JLabel jLabel4;
JLabel jLabel5;
JLabel jLabel6;
JLabel jLabel7;
JLabel jLabel8;
JLabel jLabel9;
JLabel jLabel10;
JLabel jLabel11;
JLabel jLabel12;
JLabel jLabel13;
JLabel jLabel14;
//密码标签
JLabel ms[] = new JLabel[n];
JLabel m1 = new JLabel();
JLabel m2 = new JLabel();
JLabel m3 = new JLabel();
JLabel m4 = new JLabel();
JLabel m5 = new JLabel();
JLabel m6 = new JLabel();
JLabel m7 = new JLabel();
JLabel m8 = new JLabel();
JLabel m9 = new JLabel();
JLabel m10 = new JLabel();
JLabel m11 = new JLabel();
JLabel m12 = new JLabel();
//获取参数
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
//applet的构造器
public MainApplet() {
}
//初始化applet
public void init() {
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
//面板初始化
private void jbInit() throws Exception {
//通过路径加载图片,并添加到数组中
images = new Image[n];
for (int i = 0; i < n; i++) {
//getDocumentBase()为html文件当前所在的目录
images[i] = getImage(new URL(getDocumentBase(),
"image\\" + (i + 1) + ".jpg"));
}
//把图片添加到标签中
jLabel3 = new JLabel(new ImageIcon(images[0]));
jLabel4 = new JLabel(new ImageIcon(images[1]));
jLabel5 = new JLabel(new ImageIcon(images[2]));
jLabel6 = new JLabel(new ImageIcon(images[3]));
jLabel7 = new JLabel(new ImageIcon(images[4]));
jLabel8 = new JLabel(new ImageIcon(images[5]));
jLabel9 = new JLabel(new ImageIcon(images[6]));
jLabel10 = new JLabel(new ImageIcon(images[7]));
jLabel11 = new JLabel(new ImageIcon(images[8]));
jLabel12 = new JLabel(new ImageIcon(images[9]));
jLabel13 = new JLabel(new ImageIcon(images[10]));
jLabel14 = new JLabel(new ImageIcon(images[11]));
//添加到标签数组中
jLabels = new JLabel[n];
jLabels[0] = jLabel3;
jLabels[1] = jLabel4;
jLabels[2] = jLabel5;
jLabels[3] = jLabel6;
jLabels[4] = jLabel7;
jLabels[5] = jLabel8;
jLabels[6] = jLabel9;
jLabels[7] = jLabel10;
jLabels[8] = jLabel11;
jLabels[9] = jLabel12;
jLabels[10] = jLabel13;
jLabels[11] = jLabel14;
//启动计数器,这里还没有使用,如果有需要可以启动timer.start()然后在actionPerformed()添加需要的代码
timer = new javax.swing.Timer(5, this);
//timer.start();
ms[0] = m1;
ms[1] = m2;
ms[2] = m3;
ms[3] = m4;
ms[4] = m5;
ms[5] = m6;
ms[6] = m7;
ms[7] = m8;
ms[8] = m9;
ms[9] = m10;
ms[10] = m11;
ms[11] = m12;
//边线
border3 = BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.white,
SystemColor.inactiveCaptionText,
new Color(115, 114, 105),
new Color(165, 163, 151));
border4 = new EtchedBorder(EtchedBorder.RAISED, Color.yellow,
new Color(178, 140, 0));
border5 = BorderFactory.createLineBorder(SystemColor.controlText, 1);
border6 = BorderFactory.createEmptyBorder();
border7 = BorderFactory.createCompoundBorder(border6, border5);
border8 = BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.white,
Color.white,
new Color(115, 114, 105),
new Color(165, 163, 151));
border9 = BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.white,
Color.white,
new Color(115, 114, 105),
new Color(165, 163, 151));
border10 = new EtchedBorder(EtchedBorder.RAISED, Color.white,
new Color(165, 163, 151));
border11 = BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.white,
Color.white,
new Color(115, 114, 105),
new Color(165, 163, 151));
border12 = new MatteBorder(null);
border13 = BorderFactory.createBevelBorder(BevelBorder.RAISED,
new Color(4, 4, 4),
new Color(3, 3, 3), Color.black,
Color.black);
border16 = BorderFactory.createEmptyBorder();
border17 = BorderFactory.createLineBorder(Color.darkGray, 1);
border18 = BorderFactory.createEmptyBorder();
border19 = BorderFactory.createCompoundBorder(border18, border10);
border20 = BorderFactory.createEmptyBorder();
border21 = BorderFactory.createCompoundBorder(border20, border3);
//设置布局
//下面是界面的实现
this.setLayout(borderLayout2);
jPanel1.setLayout(null);
jPanel2.setLayout(borderLayout3);
jPanel3.setBorder(border2);
jPanel3.setLayout(borderLayout5);
jPanel4.setBorder(border3);
jPanel4.setPreferredSize(new Dimension(130, 450));
jPanel4.setLayout(flowLayout1);
jButton1.setFont(new java.awt.Font("Dialog", 0, 13));
jButton1.setToolTipText("");
jButton1.setText("参数导入");
jButton1.addActionListener(new MainApplet_jButton1_actionAdapter(this));
jButton2.setText("开 始");
jButton2.addActionListener(new MainApplet_jButton2_actionAdapter(this));
jButton2.setEnabled(false);
jButton2.setFont(new java.awt.Font("Dialog", 0, 13));
jButton4.setRequestFocusEnabled(true);
jButton4.setFont(new java.awt.Font("Dialog", 0, 13));
jButton4.setText("帮 助");
jButton4.addActionListener(new MainApplet_jButton4_actionAdapter(this));
jPanel5.setBackground(Color.orange);
jPanel5.setPreferredSize(new Dimension(10, 450));
jPanel5.setLayout(borderLayout6);
jPanel6.setBackground(Color.orange);
jPanel6.setBorder(border4);
jPanel6.setPreferredSize(new Dimension(10, 450));
jPanel6.setToolTipText("运行窗口");
jPanel6.setLayout(null);
jLabel3.setBorder(border7);
jLabel3.setMinimumSize(new Dimension(100, 100));
jLabel3.setBounds(new Rectangle(252, 21, 100, 100));
jLabel4.setBorder(border5);
jLabel4.setBounds(new Rectangle(355, 21, 100, 100));
jLabel5.setBorder(border5);
jLabel5.setBounds(new Rectangle(355, 122, 100, 100));
jLabel6.setBorder(border5);
jLabel6.setBounds(new Rectangle(355, 223, 100, 100));
jLabel7.setBorder(border5);
jLabel7.setBounds(new Rectangle(355, 324, 100, 100));
jLabel8.setBorder(border5);
jLabel8.setBounds(new Rectangle(252, 324, 100, 100));
jLabel9.setBorder(border5);
jLabel9.setBounds(new Rectangle(149, 324, 100, 100));
jLabel10.setBorder(border5);
jLabel10.setBounds(new Rectangle(46, 324, 100, 100));
jLabel11.setBorder(border5);
jLabel11.setBounds(new Rectangle(46, 223, 100, 100));
jLabel12.setBorder(border5);
jLabel12.setBounds(new Rectangle(46, 122, 100, 100));
jLabel13.setBorder(border5);
jLabel13.setBounds(new Rectangle(46, 21, 100, 100));
jLabel14.setBorder(border5);
jLabel14.setBounds(new Rectangle(149, 21, 100, 100));
m1.setFont(new java.awt.Font("Dialog", 0, 20));
m1.setHorizontalAlignment(SwingConstants.CENTER);
m1.setText(" ");
m1.setBounds(new Rectangle(251, 0, 101, 24));
m2.setBounds(new Rectangle(460, 49, 80, 41));
m2.setFont(new java.awt.Font("Dialog", 0, 20));
m2.setText(" ");
m3.setBounds(new Rectangle(460, 158, 80, 41));
m3.setFont(new java.awt.Font("Dialog", 0, 20));
m3.setText(" ");
m4.setBounds(new Rectangle(460, 278, 80, 41));
m4.setFont(new java.awt.Font("Dialog", 0, 20));
m4.setText(" ");
m5.setBounds(new Rectangle(460, 370, 80, 41));
m5.setFont(new java.awt.Font("Dialog", 0, 20));
m5.setText(" ");
m6.setBounds(new Rectangle(253, 423, 93, 21));
m6.setFont(new java.awt.Font("Dialog", 0, 20));
m6.setHorizontalAlignment(SwingConstants.CENTER);
m6.setText(" ");
m7.setBounds(new Rectangle(150, 423, 98, 22));
m7.setFont(new java.awt.Font("Dialog", 0, 20));
m7.setHorizontalAlignment(SwingConstants.CENTER);
m7.setText(" ");
m8.setBounds(new Rectangle( -38, 361, 72, 41));
m8.setFont(new java.awt.Font("Dialog", 0, 20));
m8.setHorizontalAlignment(SwingConstants.RIGHT);
m8.setText(" ");
m9.setBounds(new Rectangle( -37, 265, 72, 41));
m9.setFont(new java.awt.Font("Dialog", 0, 20));
m9.setHorizontalAlignment(SwingConstants.RIGHT);
m9.setText(" ");
m10.setBounds(new Rectangle( -35, 170, 72, 41));
m10.setFont(new java.awt.Font("Dialog", 0, 20));
m10.setHorizontalAlignment(SwingConstants.RIGHT);
m10.setText(" ");
m11.setBounds(new Rectangle( -32, 65, 69, 35));
m11.setFont(new java.awt.Font("Dialog", 0, 20));
m11.setHorizontalAlignment(SwingConstants.RIGHT);
m11.setText(" ");
m12.setBounds(new Rectangle(152, 0, 93, 27));
m12.setFont(new java.awt.Font("Dialog", 0, 20));
m12.setHorizontalAlignment(SwingConstants.CENTER);
m12.setText(" ");
jPanel2.setBorder(border9);
jPanel7.setBorder(border21);
jPanel7.setPreferredSize(new Dimension(10, 60));
jPanel7.setLayout(null);
jSlider1.setLabelTable(null);
jSlider1.setMajorTickSpacing(0);
jSlider1.setMaximum(1000);
jSlider1.setMinimum(0);
jSlider1.setMinorTickSpacing(0);
jSlider1.setPaintLabels(true);
jSlider1.setPaintTicks(true);
jSlider1.setBorder(border10);
jSlider1.setMaximumSize(new Dimension(32767, 28));
jSlider1.setOpaque(true);
jSlider1.setToolTipText("设置运算速度");
jSlider1.setBounds(new Rectangle(32, 3, 167, 33));
jSlider1.addMouseMotionListener(new MainApplet_jSlider1_mouseMotionAdapter(this));
jLabel2.setFont(new java.awt.Font("Dialog", 0, 12));
jLabel2.setText("快");
jLabel2.setBounds(new Rectangle(12, 6, 30, 30));
jPanel1.setBorder(border3);
jPanel1.setPreferredSize(new Dimension(0, 40));
jLabel1.setFont(new java.awt.Font("Dialog", 0, 13));
jLabel1.setText("数据结构 -- 约瑟夫环演示程序");
jLabel1.setBounds(new Rectangle(271, 3, 195, 29));
jLabel15.setBounds(new Rectangle(204, 3, 30, 30));
jLabel15.setText("慢");
jLabel15.setFont(new java.awt.Font("Dialog", 0, 12));
jLabel16.setFont(new java.awt.Font("Dialog", 0, 12));
jLabel16.setText("运算速度");
jLabel16.setBounds(new Rectangle(95, 39, 73, 19));
jPanel8.setBounds(new Rectangle(458, 0, 381, 447));
jPanel8.setLayout(borderLayout4);
//设置帮助对话面板的可视行
jPanel8.setVisible(false);
jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.
HORIZONTAL_SCROLLBAR_NEVER);
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.
VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane1.getViewport().setBackground(Color.white);
jTextArea2.setBackground(Color.white);
jTextArea2.setFont(new java.awt.Font("DialogInput", 0, 13));
jTextArea2.setForeground(Color.blue);
jTextArea2.setDisabledTextColor(Color.white);
jTextArea2.setEditable(false);
//帮助信息,原先想用文件输入流来读取相应的文本文件做为帮助信息,当考虑到applet对安全的限制所以,就把这个模块简单化了
jTextArea2.setText("约瑟夫环演示程序\n" +
"\n作者:林沛仲\n" +
"\n解题思路: \n" +
"通过构建节点类Node,节点类Node具有数据域与\n"+
"指针域,数据域中包含我们所关心的几个属性,同\n"+
"时,我们让指针域指向节点的下节点对象,依次进行\n"+
"下去,在这个过程中我们用到了指针index,她的作\n"+
"用是指向当前操作(读取\\写入)的节点,当我们创\n"+
"建了满足我们需求的测试数据数时,index指针指向的\n"+
"节点为最后的节点,这时我们可以让最后的节点的指针\n"+
"域指向第一个节点,这样我们就构造了一个循环单链表\n"+
",有了这个基础,我们的测试就变得很简单了.\n"+
" 构建表后,我们可以用两层循环来实现我们想要达到\n"+
"的效果,外出循环for(int i = 0; i<=s; i++),这层\n"+
"实现的效果是每当我们在内层循环中出列依次i加一,也就\n"+
"实现了当i = s,循环结束时,环中元素已全部完成去列.\n"+
"在内层循环中,我们的任务是根据密码的大小,让链表依次\n"+
"指向下个节点元素,当next的次数达到密码的大小的时候,\n"+
"我们把当前节点从链表中删除,这样下次next(报数)就\n"+
"不会next到她了(报到她),在删除的同时我们就可以获取\n"+
"我们关心的该节点的相关属性值。结束当前内层循环,i加加\n"+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -