2011-11-14 26 views
0

私がここでやろうとしているのは、私のメソッドからrepaint()メソッドを呼び出すことです。ただし、repaint()は機能しません。また、画像(var bgに保存されています)が画面に表示されません。なぜこれがうまくいかないのかについての示唆はありますか?repaint()メソッドは私の画面を再描画しません

package core; 

/*** @author Adil 

* 2DPlatformer 
* Written by Adil 
* Built upon the player-core framework (written by Adil) 
* GNU Licensed 

*/ 
import java.awt.*; 

import javax.swing.JFrame; 

import javax.swing.ImageIcon; 

@SuppressWarnings("serial") //Suppress serial warning ID 
public class Core extends JFrame { 

    public static void main(String[] args) { 
     DisplayMode dm = new DisplayMode(800, 600, 16, 
       DisplayMode.REFRESH_RATE_UNKNOWN); 
     //new display with parameters 800x600 + 16 bit color depth 
     Core i = new Core(); //new core class var 
     i.run(dm); 
    } 
//variables for image loading below 
    public Screen s; 
    public Image bg; 
    public boolean loaded = false; 

//run method below 
    public void run(DisplayMode dm) { 
     setBackground(Color.BLACK); 
     setForeground(Color.WHITE); 
     setFont(new Font("Ubuntu", Font.PLAIN, 24)); 
     s = new Screen(); 
     loaded = false; 
     try { 
      s.setScreenSize(dm, this); 
      loadbg(); 
      try { 
       Thread.sleep(5000); 
      } catch (Exception ex) { 
      } 
     } finally { 
      s.RestoreScreen(); 
     } 
    } 

    public void loadbg() { 
     bg = new ImageIcon(
       "file:\\\\home\\adil\\Desktop\\pack_2\\bgame.jpg").getImage(); 
     loaded = true; 
     s.repaint();//s is my screen object, but it won't repaint. 
    } 

    public void paint(Graphics g) { 
     if (g instanceof Graphics2D) { 
      Graphics2D g2 = (Graphics2D) g; 
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
        RenderingHints.VALUE_ANTIALIAS_ON); 
     } 
     if (loaded) { 
      g.drawImage(bg, 0, 0, null); 
     } 
    } 
} 

答えて

6

1)より良い方法はJLabelIcon/ImageIconを置くのではなく、paint()

2を使用してImageを描くことになる)スイングのためのpaintComponent()ではなくpaint()

3であり)を使用しないでくださいThread.sleep(int)スイングGUIの使用javax.swing.Timerの代わりにThread.sleep(int)の間にあなたはGUIを単に凍結する、他の何も

+0

+1 良い点。 – camickr

+0

私は、paintComponent()によってファイルを描画しロードする方法を変更するなど、いくつかの他のメソッドを試しましたが、うまくいかないようです。 – Adil

+0

この投稿を確認する必要はありませんhttp://stackoverflow.com/questions/8084115/use-of-seticon-on-jlabel-repeats-old-image/8084657#8084657またはhttp://stackoverflow.com/questions/7943584/update-jlabel-every-x-seconds-from-arraylistlist-java/7944388#7944388 – mKorbel