Java 重新绘制JPanel并更新屏幕
我正试图用一根线让一个JPanel褪色。实际上那不是褪色,而是他通过改变rgb值逐渐将颜色由白色变为黑色.Java 重新绘制JPanel并更新屏幕,java,swing,Java,Swing,我正试图用一根线让一个JPanel褪色。实际上那不是褪色,而是他通过改变rgb值逐渐将颜色由白色变为黑色. public class MostraPainel { public static void main(String[] args) { JFrame jf = new JFrame(); jf.setSize(500, 500); // Centraliza jf.setLocationRelativeTo(n
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();
}
}
所以我想按照我设置的间隔重新绘制面板,看看panel类
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方法在面板上绘制一个图像,该方法运行repaint并将1和cont变量相加。这实际上是可行的,但屏幕不会在每次执行重绘时更新,因此淡入淡出的FPS较低。如果我继续调整屏幕大小,淡入效果会很好,有什么问题吗?我通过添加这一行来解决问题
Toolkit.getDefaultToolkit().sync();
感谢您的帮助要更快地获得更好的帮助,请发布或。如果cont不==1,您可能会阻止调用super的paintComponent方法,您不应该这样做,因为这样做会阻止JPanel自己进行内部绘制和擦除。除了极少数例外,super的方法应该始终在重写中调用。