我的程序使用Jframe,每当我最小化窗口并将其重新启动时,程序就会自动运行。我怎样才能使它在最小化时不这样做?
代码:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
import java.util.Random;
public class AB extends Component {
public void paint(Graphics g) {
Random r = new Random();
g.setColor(Color.black);
g.fillRect(r.nextInt(100), r.nextInt(100), 100, 100);
}
public static void main(String[] args) {
JFrame f = new JFrame("Load Image Sample");
f.getContentPane().setBackground(Color.white);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
f.setSize(dim.width, dim.height);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.add(new AB());
f.setVisible(true);
}
}
答案 0 :(得分:2)
我的猜测:您的paint(...)
或paintComponent(...)
方法覆盖中存在程序逻辑。如果是这样,请从这些方法中获取逻辑,因为当您发现时,您无法完全控制何时或甚至是否被调用。逻辑属于其他地方,可能在Swing Timer中,很难说没有代码或更详细的问题。
如果这没有帮助,那么您需要通过创建和发布minimal, runnable, example program向我们展示代码中的错误,并告诉我们您的程序的详细信息及其不当行为。< / p>
看了你的代码之后,我看到我的假设/猜测是正确的:你在paint方法中选择你的随机数,所以它们会随着每次重绘而改变。你会想要
paintComponent
方法paintComponent
方法。paintComponent
方法覆盖中构造函数中生成的数字绘制矩形。如,
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.*;
@SuppressWarnings("serial")
public class RandomRect extends JPanel {
private static final int MAX_INT = 100;
private static final Color RECT_COLOR = Color.black;
private Random random = new Random();
private int randomX;
private int randomY;
public RandomRect() {
randomX = random.nextInt(MAX_INT);
randomY = random.nextInt(MAX_INT);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(RECT_COLOR);
g.fillRect(randomX, randomY, MAX_INT, MAX_INT);
}
private static void createAndShowGui() {
JFrame frame = new JFrame("RandomRect");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new RandomRect());
//frame.pack();
// frame.setLocationRelativeTo(null);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}