我目前正在开发其中应用程序会随机更改颜色的应用程序。但是,我不知道如何摆脱JApplet并以其他方式编写它。顺便说一句,这是“ Thinking in Java”中的代码。我想进行一些其他更改,但是由于JApplet,对我来说这是不可能的:/
据我所知,JApplet用于网页,在这种情况下是不必要的
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);
}
}
最佳答案
基本思想是摆脱对JApplet
的所有引用。这意味着摆脱init
方法,并将run
方法的内容移到main
方法中,然后在applet上构建UI,在JFrame
上构建UI
例如...
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);
}
});
}
}
我没有尝试将其编译(直接输入答案),因此可能会有一些“打字错误”,但是我敢肯定,您可以弄清楚它们;)
我还认为您需要找到“ Thinking in Java”的更新副本。
关于java - 没有JApplet的ColorBox,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50359102/