代码之家  ›  专栏  ›  技术社区  ›  Mark

不带JApplet的彩盒

  •  0
  • Mark  · 技术社区  · 6 年前

    我目前正在开发一个应用程序,其中方框会随机改变颜色。然而,我不知道如何摆脱JApplet,用另一种方式写它。顺便说一句,这是来自“用java思考”的代码。我想做一些额外的更改,但由于JApplet的原因,我不可能:/

    据我所知,JApplet用于Web页面,在这种情况下是不必要的

    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.GridLayout;
    import java.util.Random;
    
    import javax.swing.JApplet;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    class CBox extends JPanel implements Runnable {
      private Thread t;
    
      private int pause;
    
      private static final Color[] colors = { Color.BLACK, Color.BLUE,
          Color.CYAN, Color.DARK_GRAY, Color.GRAY, Color.GREEN,
          Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, Color.PINK,
          Color.RED, Color.WHITE, Color.YELLOW };
    
      private static Random rand = new Random();
    
      private static final Color newColor() {
        return colors[rand.nextInt(colors.length)];
      }
    
      private Color cColor = newColor();
    
      public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(cColor);
        Dimension s = getSize();
        g.fillRect(0, 0, s.width, s.height);
      }
    
      public CBox(int pause) {
        this.pause = pause;
        t = new Thread(this);
        t.start();
      }
    
      public void run() {
        while (true) {
          cColor = newColor();
          repaint();
          try {
            t.sleep(pause);
          } catch (InterruptedException e) {
            throw new RuntimeException(e);
          }
        }
      }
    }
    
    public class ColorBoxes extends JApplet {
      private boolean isApplet = true;
    
      private int grid = 12;
    
      private int pause = 50;
    
      public void init() {
    
        if (isApplet) {
          String gsize = getParameter("grid");
          if (gsize != null)
            grid = Integer.parseInt(gsize);
          String pse = getParameter("pause");
          if (pse != null)
            pause = Integer.parseInt(pse);
        }
        Container cp = getContentPane();
        cp.setLayout(new GridLayout(grid, grid));
        for (int i = 0; i < grid * grid; i++)
          cp.add(new CBox(pause));
      }
    
      public static void main(String[] args) {
        ColorBoxes applet = new ColorBoxes();
        applet.isApplet = false;
        if (args.length > 0)
          applet.grid = Integer.parseInt(args[0]);
        if (args.length > 1)
          applet.pause = Integer.parseInt(args[1]);
        run(applet, 500, 400);
      }
    
      public static void run(JApplet applet, int width, int height) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(applet);
        frame.setSize(width, height);
        applet.init();
        applet.start();
        frame.setVisible(true);
      }
    } 
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   MadProgrammer    6 年前

    基本思想是去掉对 JApplet 。这意味着要摆脱 init 方法并移动 run 方法转换为 main 方法,而不是在applet上构建UI,而是在 JFrame

    例如

    public class ColorBoxes {
      private int grid = 12;
      private int pause = 50;
    
      public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                ColorBoxes applet = new ColorBoxes();
                if (args.length > 0) {
                  grid = Integer.parseInt(args[0]);
                }
                if (args.length > 1) {
                  pause = Integer.parseInt(args[1]);
                }
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridLayout(grid, grid));
                for (int i = 0; i < grid * grid; i++){
                    frame.add(new CBox(pause));
                }
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
      }
    
    }   
    

    我还没有尝试编译这个(直接输入到答案中),所以可能会有一些“拼写错误”,但我相信你可以找到答案;)

    我还认为您需要找到“java思维”的更新版本