Я пытаюсь «потушить» 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();
}
}
Так я хочу, чтобы перекрасить панель интервалом я набор, смотрите класс панель
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() нарисовать изображение на панели, и запустить метод() перерисовать и суммировать 1 с переменной. Это действительно работает, но экран не обновляется каждый раз, когда я выполняю repaint(), поэтому у Fade есть низкий FPS. Если я оставлю изменение размера экрана, то затухание будет хорошо работать, в чем проблема?
Для лучшей помощи рано, оставить [MCVE] или [Short, самодостаточный Правильный пример] (HTTP://www.sscce.org/). –
Возможный дубликат метода Java repaint() не всегда работает] (http://stackoverflow.com/questions/15071321/java-repaint-method-doesnt-always-work) –
Вы блокируете метод paintComponent от super вызывается, если cont не является == 1, и вы не должны этого делать, поскольку, делая это, вы не позволяете JPanel выполнять свою собственную живопись и стирание. За исключением редкого исключения, метод super должен всегда вызываться ** в вашем переопределении. –