gpt4 book ai didi

java - 如何重新运行 paint 方法以使 JPanel 具有动画效果?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:59:59 26 4
gpt4 key购买 nike

我想我需要在注释所在的位置放置一些代码(或者可能使用非静态方法,但我不确定)。 main 方法创建窗口,然后启动图形方法。我希望蓝色方 block 闪烁。

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class paintTest extends JPanel{
private static JFrame theWindow = new JFrame("Window");
static boolean blueSqr = false;

public void paint(Graphics g) {
g.setColor(Color.RED);
g.fillRect(10, 10, 10, 10);

if(blueSqr){
g.setColor(Color.BLUE);
g.fillRect(10, 10, 10, 10);
}
}

public static void main(String[] args){
createWindow();
theWindow.getContentPane().add(new paintTest());
while(true){
blueSqr = false;

System.out.println("off");

try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}

blueSqr = true;
// Needs something here
System.out.println("on");

try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
}
}

public static void createWindow(){
theWindow.setSize(500, 500);
theWindow.setLocationRelativeTo(null);
theWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
theWindow.setVisible(true);
}
}

任何帮助都会非常好。

最佳答案

使用 Swing Timer 调用 repaint()。此外,覆盖 JPanel 中的 paintComponent(),而不是 paint()

像这样:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PaintTest extends JPanel{

boolean blueSqr = false;

PaintTest() {
setPreferredSize(new Dimension(100,25));
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
blueSqr = !blueSqr;
repaint();
}
};
Timer timer = new Timer(1000,al);
timer.start();
}

public void paintComponent(Graphics g) {
Color c = (blueSqr ? Color.BLUE : Color.RED);
g.setColor(c);
g.fillRect(10, 10, 10, 10);
}

public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame theWindow = new JFrame("Window");
theWindow.getContentPane().add(new PaintTest());
createWindow(theWindow);
}
});
}

public static void createWindow(JFrame theWindow){
theWindow.pack();
theWindow.setLocationByPlatform(true);
theWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
theWindow.setVisible(true);
}
}

还有其他改进我懒得记录(代码胜于 Eloquent )。如果您有任何问题(先查看文档,然后再问)。

关于java - 如何重新运行 paint 方法以使 JPanel 具有动画效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9553578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com