0
我試圖用線程「淡入」一個JPanel。實際上,它並沒有消失,但他通過改變rgb值逐漸將白色變爲黑色。重新繪製一個JPanel並更新屏幕
public class MostraPainel {
public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setSize(500, 500);
// Centraliza
jf.setLocationRelativeTo(null);
Painel painel = new Painel();
jf.setContentPane(painel);
jf.setVisible(true);
new Thread(painel).start();
}
}
所以想要重新繪製由間隔I設置的面板,看面板類
public class Painel extends JPanel implements Runnable {
// alt+s
/**
* Create the panel.
*/
int cont = 0;
public Painel() {
setBackground(Color.BLACK);
}
@Override
protected void paintComponent(Graphics g) {
if (cont == 1)
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
// System.out.println(cont);
g2.setColor(new Color(cont, cont, cont));
int w = getWidth() - 1;
int h = getHeight() - 1;
int widthQ = w/8;
int heightQ = h/8;
int size = 0;
int cont = 0;
for (int j = heightQ; j < getHeight(); j += (2 * heightQ)) {
for (int i = size; i < getWidth(); i += (2 * widthQ)) {
if (cont == 0)
g2.fillRect(i + widthQ, 0, widthQ, heightQ);
g2.fillRect(i + widthQ, j + heightQ, widthQ, heightQ);
g2.fillRect(i, j, widthQ, heightQ);
}
cont++;
}
}
@Override
public void run() {
// TODO Auto-generated method stub
this.cont++;
for (cont = 0; cont < 255; cont++) {
if (this.cont < 255) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.repaint();
}
}
}
}
所以的paintComponent()方法來繪製面板上的圖像,並且該方法的run()重新繪製並將1加到cont變量中。這實際上工作,但屏幕不更新,每次我執行重繪(),所以淡入淡出的FPS。如果我保持調整屏幕大小,淡出效果很好,最新的問題是什麼?
爲了更好地幫助更快,發佈[MCVE]或[短的,獨立的,正確的示例](HTTP:/ /www.sscce.org/)。 –
[Java重繪()方法的重複可能不總是工作](http://stackoverflow.com/questions/15071321/java-repaint-method-doesnt-always-work) –
您正在阻止超級的paintComponent方法如果cont不是== 1,就會被調用,並且你不應該這樣做,因爲這樣做會阻止JPanel做自己的內務繪畫和擦除。除了罕見的例外,super的方法應該總是**在你的覆蓋中被調用。 –