Bonjour, voilà dans mon programme je veux afficher une image de fond dans un JPanel. Mais cette image ne s'affiche quand minuscule et quand je clique sur agrandir elle s'affiche en grand (bonne dimension). Pourquoi ne s'affiche t-elle pas directement en taille normale ?
La classe du JPanel :
/*--------------------------------------------------------------------------------------------------------------------|
| JPlateau.java |
| |
| créé par wanghao10 |
| |
|--------------------------------------------------------------------------------------------------------------------|
*/
import javax.swing.*;
import java.awt.*;
public class JPlateau extends JPanel{ // Classe qui représente le plateau de jeu
private Image imageFond ; // image de fond(
public JPlateau() { // Constructeur
imageFond = Toolkit.getDefaultToolkit().getImage("images/imageFond.png"); // image de fond
}
public void paintComponent(Graphics g){ // méthode qui dessine une image
g.drawImage(imageFond, 0, 0, this.getWidth(), this.getHeight(), null); // on dessine une image
repaint(); // on repeint
}
}
import javax.swing.*;
import java.awt.*;
public class JPlateau extends JPanel{ // Classe qui représente le plateau de jeu
private Image imageFond ; // image de fond(
public JPlateau() { // Constructeur
imageFond = Toolkit.getDefaultToolkit().getImage("image.jpg"); // image de fond
}
public void paintComponent(Graphics g){ // méthode qui dessine une image
g.drawImage(imageFond, 0, 0, this.getWidth(), this.getHeight(), this); // on dessine une image
}
public static void main(String[] arg)
{
JFrame fen=new JFrame();
fen.add(new JPlateau());
fen.setSize(300,400);
fen.repaint();
fen.setVisible(true);
}
}
/*--------------------------------------------------------------------------------------------------------------------|
| JPlateau.java |
| |
| créé par wanghao10 |
| |
|--------------------------------------------------------------------------------------------------------------------|
*/
import javax.swing.*;
import java.awt.*;
public class JPlateau extends JPanel{ // Classe qui représente le plateau de jeu
String imageFond; // image de fond
public JPlateau() { // Constructeur
this.imageFond = "images/imageFond.png"; // image de fond
}
public void paintComponent(Graphics g){
g.drawImage(new ImageIcon(Toolkit.getDefaultToolkit().getImage(imageFond)).getImage(), 0, 0,
this.getWidth(), this.getHeight(), null);
}
}
Quand le programme apparaît on voit ceci : (l'image est toute petite)
et quand on agrandit, elle devient comme ça :
et c'est comme ceci que je voudrais que ça soit quand le programme démarre
/*--------------------------------------------------------------------------------------------------------------------|
| JConanProof.java |
| |
| créé par wanghao10 |
| |
|--------------------------------------------------------------------------------------------------------------------|
*/
/* Principes du jeu : On controle un personnage, conan, qui doit ramasser toutes les preuves d'un assassinat et
doit les ramener à Kogoro, le père de sa petite amie Ran.
Les preuves sont par exemple des couteaux, des cordes...etc.
*/
import javax.swing.*;
import java.awt.*;
public class JConanProof extends JFrame{ // Classe principale
// objets de l'interface graphique
JPlateau plateau = new JPlateau(); // plateau de jeu
public JConanProof(String titre) { // Constructeur
this.setTitle(titre); // on construit une fenêtre avec un titre indiqué
this.getContentPane().add(plateau); // on ajoute le plateau
this.setVisible(true); // la fenêtre est visible
this.pack(); // mise à jour des panels
}
public static void main(String args[]){ // méthode principale
try{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
JConanProof jeu = new JConanProof("Conan Proof"); // on créé une instance de l'objet
jeu.setSize(1100, 768); // on redimensionne la fenêtre
jeu.setLocationRelativeTo(jeu.getParent()); // on centre la fenêtre
}
catch (Exception e){}
}
}
au début de la fonction surchargée ?
Sinon essaye une autre fonction drawimage qui prend en plus les dimensions de la fenêtre pour l'afficher entièrement quelle que soit sa taille. http://slick.cokeandcode.com/javadoc/o [...] oat,%20float)
(bizarre ce lien !)
Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
Je ne comprends pas trop l'anglais mais si j'ai bien compris les paramètres ce sont :
-image bon ça c'est pas compliqué,
- x = ça je sais,
- y : ça aussi,
- srcx : position des ordonnées de la fenêtre,
- srcy : pareil pour les abscisses,
Tu as déjà eu la solution, il suffisait de rajouter le repaint sur ta frame (après ajout).
Voila la preuve:
Et le code:
import javax.swing.*;
import java.awt.*;
class JPlateau extends JPanel{ // Classe qui représente le plateau de jeu
private Image imageFond ; // image de fond(
public JPlateau() { // Constructeur
imageFond = Toolkit.getDefaultToolkit().getImage("detective_conan_1.jpg"); // image de fond
}
public void paintComponent(Graphics g){ // méthode qui dessine une image
g.drawImage(imageFond, 0, 0, this.getWidth(), this.getHeight(), this); // on dessine une image
}
/*public static void main(String[] arg)
{
System.out.println("debut");
JFrame fen=new JFrame();
fen.add(new JPlateau());
fen.repaint();
fen.setSize(300,400);
fen.setVisible(true);
System.out.println("fin");
}*/
}
public class JConanProof extends JFrame{ // Classe principale
// objets de l'interface graphique
JPlateau plateau = new JPlateau(); // plateau de jeu
public JConanProof(String titre) { // Constructeur
this.setTitle(titre); // on construit une fenêtre avec un titre indiqué
this.getContentPane().add(plateau); // on ajoute le plateau
this.setVisible(true); // la fenêtre est visible
this.repaint();
this.pack(); // mise à jour des panels
}
public static void main(String args[]){ // méthode principale
try{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
JConanProof jeu = new JConanProof("Conan Proof"); // on créé une instance de l'objet
jeu.setSize(1100, 768); // on redimensionne la fenêtre
jeu.setLocationRelativeTo(jeu.getParent()); // on centre la fenêtre
}
catch (Exception e){}
}
}
Si tu initialise la taille de ton JPanel avec this.setPreferredSize(new Dimension(largeur,hauteur)), et que tu adapte la taille de la fenêtre à celle du JPanel avec this.pack(), ça devrait marcher.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
au début de la fonction surchargée ?