首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ColorBox无JApplet

ColorBox无JApplet
EN

Stack Overflow用户
提问于 2018-05-15 20:59:52
回答 1查看 37关注 0票数 0

我目前正在开发的应用程序中,盒子会随机改变颜色。但是,我不知道如何摆脱JApplet并以另一种方式编写它。顺便说一句,这是“用java思考”的代码。我想做一些额外的修改,但是由于JApplet :/

据我所知,JApplet用于网页,这在本例中是不必要的

代码语言:javascript
复制
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);
  }
} 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-15 21:13:11

其基本思想是消除对JApplet的所有引用。这意味着摆脱init方法,将run方法的内容移动到main方法中,而不是在applet上构建UI,而是在JFrame上构建它。

例如..。

代码语言:javascript
复制
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中思考”的副本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50359102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档