2011-11-14 2 views
0

여기에서 수행하려는 작업은 loadbg() 메서드 내에서 repaint() 메서드를 호출하는 것입니다. 그러나 repaint()이 작동하지 않으며 내 이미지 (var bg에 저장 됨)가 화면에로드되지 않습니다. 이것이 작동하지 않는 이유에 대한 제안? paint()repaint() 메서드가 내 화면을 다시 칠하지 않습니다.

3) Thread.sleep(int)를 사용하지 않는이 paintComponent() 대신

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) 더 좋은 방법이 스윙에 대한 paint()

2)를 사용하여 Image 페인트보다는 JLabelIcon/ImageIcon을 넣어 것입니다 대신 스윙 GUI 사용 javax.swing.TimerThread.sleep(int) 동안 GUI가 단순히 동결, 아무것도 다른

+0

+1 3 좋은 지적. – 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

관련 문제