讓我說我有一個圖像。我把圖像放在一個JPanel中,並在JFrame中添加JPanel。圖像從框架底部移動到框架頂部,同時使用AffineTransform
縮小其大小。該變量使用線程更改。通過線程縮放圖像 - JAVA
所以這裏的下面的代碼:
public class SplashScreen extends JFrame{
Image img1;
int w=1,h=1;
int x=0,y=0;
Thread th = new Thread(new Runnable() {
@Override
public void run() {
while(true){
w-=0.05;
h-=0.05;
y-=2;
x+=1;
if(y==-100){
new MainMenu_BlueJay().setVisible(true);
dispose();
}
repaint();
try {
Thread.sleep(10);
} catch (InterruptedException ex) {
Logger.getLogger(SplashScreen.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
JPanel p = new JPanel();
public SplashScreen(){
setLayout(new BorderLayout());
p.setPreferredSize(new Dimension(900,600));
p.setBackground(Color.black);
p.setLayout(new GridLayout());
add(p);
setTitle("BlueJay");
setSize(900,600);
getContentPane().setBackground(Color.black);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
th.start();
requestFocus();
setFocusable(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
img1 = new ImageIcon("images/Intro/BJ Production 2013.png").getImage();
AffineTransform at = new AffineTransform();
at.scale(w,h);
g2d.setTransform(at);
g2d.drawImage(img1, x, y, p);
}
public static void main(String[] args) {
new SplashScreen();
}
但是我從代碼獲得以上只是黑屏。怎麼了?無論如何,如果我不使用AffineTransform
功能(只是從下往上移動),圖像會顯示並移動,但是框架會快速閃爍(閃爍)。
任何想法來解決這個問題,所以我可以移動圖像,同時減小其大小,也解決了閃爍/快速閃爍幀?
首先,你的變量線程訪問應該是volatile的。其次,線程內部的paint調用必須與SwingUtilities.invokeLater() – morpheus05
一起圍繞。那麼如果不使用線程,如何減少變量的值? – noobprogrammer