+1 aux commentaires de @AndrewThompsons.
1) Ci-dessous est incorrect, vous ne honer la chaîne de peinture en appelant la surimpressions mise en œuvre de super.paintComponent(...)
:
public void paintComponent(Graphics g) {
// Draw our Image object.
g.drawImage(image,50,10,574,960, this); // at location 50,10
// 200 wide and high
}
As per docs for paintComponent:
De plus, si vous n'Invocateur la mise en œuvre de super-vous doit honorer la propriété opaque, c'est-à-dire si ce composant est opaque, vous devez remplir complètement l'arrière-plan dans une couleur non-opaque . Si vous n'honorez pas la propriété opaque, vous verrez probablement des artefacts visuels.
devrait être:
public class Ball extends JPanel {
BufferedImage image;
public Ball() {
super();
try {
image=ImageIO.read(new File("c:/test.jpg"));//change to your path of file
}catch(Exception ex) {//file did not load properly
ex.printStackTrace();
}
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
// Draw our Image object.
g.drawImage(image,0,0,image.getWidth(),image.getHeight(), this); // at location 50,10
// 200 wide and high
}
@Override
public Dimension getPreferredSize() {
return new Dimension(image.getWidth(),image.getHeight());//replace with size of image
}
}
Notez également:
Je l'emporterait sur getPreferredSize()
de JPanel
et retourné Dimension
s que je voulais (à savoir la taille de l'image) ou le JPanel
ne sera aussi grande comme les composants ajoutés à lui et pas l'image (donc si pas de composants 0,0).
J'ai également choisi BufferedImage
par rapport à Image
et j'ai entouré l'instruction avec un appel d'essai pour vérifier si des erreurs sont levées.
Je vois que vous aviez aussi g.drawImage(image,50,10...)
pourquoi 50 et 10 et pas 0,0?
2) De plus, cette (comme @AndrewThompson a dit):
image = Toolkit.getDefaultToolkit().getImage("/D:\\lolololo\\tuto\\bin\\sa.jpg");
Pas besoin pour les / des thats que s'il se trouve dans votre forfait classes etc pas quand son sur votre Disque dur à un emplacement défini.
3) également comme l'a dit @AndrewThompson une méthode principale devrait être:
public static void main(String[] args){}
Notez la statique appliquée autre modificateur sage est juste une autre méthode.
4) Ne plus utiliser JFrame#setSize(..)
plutôt utiliser LayoutManager
et/ou remplacer getPreferredSize
et que simplement appeler pack()
sur JFrame
exemple avant de visible.
5) Veuillez également lire le Concurrency in Swing. en particulier le Event-Dispatch-Thread
'"/D: \\ lolololo \\ tuto \\ bin \\ sa.jpg "' ne devrait pas contenir le '/' principal. Il devrait être '" D: \\ lolololo \\ tuto \\ bin \\ sa.jpg "' en supposant que le reste de ce chemin est correct. En outre 'public void principal (String arg []) {' n'est ** pas ** une signature de méthode valide pour la méthode principale! –
Étant donné que Toolkit.getImage (String) 'ne renvoie aucune erreur lorsque l'image n'est pas trouvée, je préfère utiliser' ImageIO' pour les charger. Il fournit beaucoup de sortie utile lorsque quelque chose ne va pas. –