package ff;
在鸠江等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、网站制作 网站设计制作按需网站建设,公司网站建设,企业网站建设,高端网站设计,成都全网营销推广,成都外贸网站建设公司,鸠江网站建设费用合理。
import java.util.Timer;
import javax.swing.ImageIcon;
import javax.swing.SwingUtilities;
//首先声明一个LoginFrame类并继承javax.swing.JFrame类(Java里面Swing的窗体类)。
public class LoginFrame extends javax.swing.JFrame
{
//声明SplashFrame类的引用splash
private SplashFrame splash = null;
//声明Timer(计时器)
public static Timer timer = new Timer();
//构造器
public LoginFrame() {
/*
* 该功能实现:在登录界面运行之前,完成快闪屏的显示
* 1)显示快闪屏幕;2)让快闪屏停留3000毫秒;3)快闪屏消失,登录窗口显示;
*/
//如果SplashFrame为空则创建一个
if (splash == null) {
splash = new SplashFrame();
}
// 1)显示快闪屏幕,调用显示快闪屏的方法showSplashScreen()
//将run方法里面的内容嵌入到主线程(UI)里面执行。此方法不能再主线程里调用,只能在自建线程里调用
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//设置为可见
splash.setVisible(true);
}
});
// 2)让快闪屏停留3000毫秒
try {
Thread.sleep(3000);//上本线程睡觉3秒
} catch (Exception e) {
e.printStackTrace();
}
// 3)退出快闪屏
//将run方法里面的内容嵌入到主线程(UI)里面执行。
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//释放splash
splash.dispose();
splash = null;
}
});
//设置窗口的图标
this.setIconImage(new ImageIcon("E:/Java_project/pro_RoomManage/image/system.png").getImage());
//初始化登录窗口
initComponents();
}
你的贪吃蛇应该是开线程移动一次闪屏一次吧,如果是这样的话是可以用双缓冲技术解决的,原理你可以上网搜一下双缓冲技术,我直接告诉你解决办法,很简单,就是在你paint方法的上面加一个update方法,同时添加两个成员变量,写法如下:
private Image iBuffer;
private Graphics gBuffer;
public void update(Graphics g) {
if (iBuffer == null) {
iBuffer = createImage(this.getSize().width, this.getSize().height);
gBuffer = iBuffer.getGraphics();
}
gBuffer.setColor(getBackground());
gBuffer.fillRect(0, 0, this.getSize().width, this.getSize().height);
paint(gBuffer);
g.drawImage(iBuffer, 0, 0, this);
}
记住,就把这段代码加在你的paint方法的同一个类里面就行,这样大概原理就是重写了内置的update方法,每次repaint的时候都会提前画好新的内容,这样就不会闪烁了,希望我的答案可以帮到你。
package panel;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JPanel;
import main.MainTank;
public class TipPanel extends JPanel implements Runnable{
/**
*
*/
private static final long serialVersionUID = 1L;
//偶数打印,画面板
int time=0;
public void paintComponent(Graphics g){
super.paint(g);
g.fillRect(0, 0, MainTank.getWidthOfGame(), MainTank.getHeightOfGame());//绘制提示窗口
if (time%2==0){//偶数打印,画面板,造成闪烁效果
g.setColor(Color.ORANGE);
Font font=new Font("华文楷体",Font.BOLD,30);
g.setFont(font);//选用字体
g.drawString("Ready", 140, 130);
}
}
@Override
public void run() {
while (true){
try{
Thread.sleep(250);
}catch (Exception e){
e.getMessage();
}
time++;//绘图开关
this.repaint();
}
}
}//TipPanel
类似的,修改下就行