⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainapplet.java

📁 约瑟夫环javaApplet演示程序(源码).
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -