2014-05-17 3 views
0

Voici le code de ce programme. Si je charge les images dans la méthode void paintComponent (Graphics g) {} publique les images chargent, cependant si je les charge d'une autre classe ils ne le font pas.L'image ne charge pas/ne met pas à jour

classe principale:

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(); 

    } 
} 

classe de cadre:

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); 
    } 
} 

rendre classe

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(); 
    } 
} 

classe de chargement

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; 

    } 
} 

Lorsque le programme démarre, il ouvre un cadre vide sans images. Qu'est-ce que je fais mal?

Arun

+0

Votre code doit être révisé, Vous n'ouvrez même pas '' {'' dans la classe Render, il n'y a pas de déclaration du champ '' frame'' ... – MCHAppy

+0

Désolé, le code a été ajouté manuellement, j'ai peut-être oublié d'ajouter des parties de celui-ci. – arunptl100

+0

Je l'ai corrigé – arunptl100

Répondre

0

Notez que les programmes de peinture SHOULD remplacent paintComponent() pour dessiner/charge/... images

Donc, si vous voulez charger des images dans une autre classe, il devrait étend JPanel et passer outre paintComponent () comme tu l'as fait avec la classe de rendu.

+0

Ok, donc je devrais supprimer la classe loader et charger les images dans public void paintComponent (Graphics g) { super.paintComponent (g); g.drawImage (loader.Getbackground(), -100, -400, null); '? Voici comment je l'ai fait à l'origine mais je pensais que charger des images dans un autre thread entraînerait moins de blanc sur l'écran avant que les images ne chargent – arunptl100

+0

Vous pouvez créer un nouveau thread pour charger des images qui implémente Runnable et étend Jpanel puis à l'intérieur de la méthode run vous pouvez remplacer la méthode paintComponent et charger votre image – MCHAppy