2014-05-17 98 views
0

這是此程序的代碼。如果我加載圖像公共無效paintComponent(Graphics g){}方法的圖像加載,但是如果我加載他們從另一個類他們不。圖像未加載/更新

主類:

public class main { 

    static GUI GUI = new GUI(); 
    static render render = new render(); 
    static loader loader = new loader(); 

    public static void main(String [] args) { 
     frame.start(); 
     loader.start(); 

    } 
} 

幀類:

public class GUI implements Runnable { 

    public void start() { 
     new Thread(this).start(); 
    } 

    public void run(){ 
     JFrame frame = new JFrame(); 
     System.out.println("frame starting"); 
     frame.setSize(700,600); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null); 
     frame.setTitle("Project "); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) 
     frame.addMouseListener(render); 
     frame.add(render); 
     frame.setVisible(true); 
    } 
} 

呈現類

public class render extends JPanel implements ActionListener { 

    Timer tm = new Timer(7, this); 
    loader loader = new loader(); 

    public render() { 
     tm.start(); 
    } 

    public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawImage(loader.Getbackground(), -100,-400,null); 

    public void actionPerformed(ActionEvent e) { 
     repaint(); 
    } 
} 

loader類

public class loader implements Runnable { 

    Image background; 

    public void start() { 
     new Thread(this).start(); 
    } 

    public void run() { 
     ImageIcon backgroundhold = new ImageIcon(render.class.getResource("resources/Background.png")); 
     background = backgroundhold.getImage(); 
     setbackground(background); 
    } 

    public void setbackground(Image background) { 
     this.background = background; 

    } 

    public Image Getbackground() { 
     return background; 
    } 

    public void setbackground(Image background){ 
     this.background = background; 

    } 
} 

當程序啓動時,它會打開一個沒有圖像的空幀。我究竟做錯了什麼?

阿倫

+0

你的代碼必須被檢查,你甚至不會在類Render中打開'{'',''frame''沒有聲明... – MCHAppy

+0

對不起,代碼是手動添加的,我可能有忘記添加它的一部分。 – arunptl100

+0

我已經改正了 – arunptl100

回答

0

注意繪圖程序SHOULD重寫paintComponent()來繪製/負載/ ...圖像

所以,如果你想在另一個類加載圖像,它應該擴展JPanel並重寫paintComponent( )像你使用渲染類一樣。

+0

好,所以我應該刪除loader類並在'public void paintComponent(Graphics g)中加載圖像{super35}。 g.drawImage(loader.Getbackground(),-100,-400,null); '?這是我最初的做法,但我認爲在另一個線程中加載圖像會導致屏幕上出現較少的「白色」,然後圖像加載 – arunptl100

+0

,您可以創建新線程來加載實現Runnable並擴展Jpanel然後在運行方法內的圖像你可以重寫paintComponent方法並加載你的圖像 – MCHAppy