2015-10-02 2 views
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(); 

    } 
} 

Так я хочу, чтобы перекрасить панель интервалом я набор, смотрите класс панель

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. Если я оставлю изменение размера экрана, то затухание будет хорошо работать, в чем проблема?

+1

Для лучшей помощи рано, оставить [MCVE] или [Short, самодостаточный Правильный пример] (HTTP://www.sscce.org/). –

+1

Возможный дубликат метода Java repaint() не всегда работает] (http://stackoverflow.com/questions/15071321/java-repaint-method-doesnt-always-work) –

+1

Вы блокируете метод paintComponent от super вызывается, если cont не является == 1, и вы не должны этого делать, поскольку, делая это, вы не позволяете JPanel выполнять свою собственную живопись и стирание. За исключением редкого исключения, метод super должен всегда вызываться ** в вашем переопределении. –

ответ

0

Я решить проблему надстройки этой строку

Toolkit.getDefaultToolkit().sync(); 

Спасибо за помощь

Смежные вопросы