package ff;
在鳩江等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站制作 網(wǎng)站設(shè)計制作按需網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,成都全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,鳩江網(wǎng)站建設(shè)費用合理。
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();
//構(gòu)造器
public LoginFrame() {
/*
* 該功能實現(xiàn):在登錄界面運行之前,完成快閃屏的顯示
* 1)顯示快閃屏幕;2)讓快閃屏停留3000毫秒;3)快閃屏消失,登錄窗口顯示;
*/
//如果SplashFrame為空則創(chuàng)建一個
if (splash == null) {
splash = new SplashFrame();
}
// 1)顯示快閃屏幕,調(diào)用顯示快閃屏的方法showSplashScreen()
//將run方法里面的內(nèi)容嵌入到主線程(UI)里面執(zhí)行。此方法不能再主線程里調(diào)用,只能在自建線程里調(diào)用
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//設(shè)置為可見
splash.setVisible(true);
}
});
// 2)讓快閃屏停留3000毫秒
try {
Thread.sleep(3000);//上本線程睡覺3秒
} catch (Exception e) {
e.printStackTrace();
}
// 3)退出快閃屏
//將run方法里面的內(nèi)容嵌入到主線程(UI)里面執(zhí)行。
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//釋放splash
splash.dispose();
splash = null;
}
});
//設(shè)置窗口的圖標
this.setIconImage(new ImageIcon("E:/Java_project/pro_RoomManage/image/system.png").getImage());
//初始化登錄窗口
initComponents();
}
你的貪吃蛇應(yīng)該是開線程移動一次閃屏一次吧,如果是這樣的話是可以用雙緩沖技術(shù)解決的,原理你可以上網(wǎng)搜一下雙緩沖技術(shù),我直接告訴你解決辦法,很簡單,就是在你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方法的同一個類里面就行,這樣大概原理就是重寫了內(nèi)置的update方法,每次repaint的時候都會提前畫好新的內(nèi)容,這樣就不會閃爍了,希望我的答案可以幫到你。
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;
//偶數(shù)打印,畫面板
int time=0;
public void paintComponent(Graphics g){
super.paint(g);
g.fillRect(0, 0, MainTank.getWidthOfGame(), MainTank.getHeightOfGame());//繪制提示窗口
if (time%2==0){//偶數(shù)打印,畫面板,造成閃爍效果
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++;//繪圖開關(guān)
this.repaint();
}
}
}//TipPanel
類似的,修改下就行