2009-12-28 4 views
2

J'utilise une sous-classe personnalisée de JPanel pour m'offrir plus de contrôle sur l'affichage de certaines images. Le code est ci-dessous.Java Netbeans affichage simple Image en mode design

Cependant, dans NetBeans, en mode design, j'aimerais pouvoir voir l'image avec laquelle je travaille, au lieu de simplement regarder le contour de l'objet.

Il existe un attribut d'image, mais la seule façon de définir l'image est d'injecter du code personnalisé dans l'attribut image. Cependant, je ne sais pas quel code je dois inclure pour voir l'image, ou s'il y a une façon plus simple de le faire.

import javax.swing.*; 
import java.awt.*; 

public class ImagePanel extends JPanel { 

    private Image img; 

    public void setImage(String img) { 
    this.img = new ImageIcon(img).getImage();//setImage(new ImageIcon(img).getImage()); 
    } 

    public void setImage(Image img) { 
    int width = this.getWidth(); 
    int height = (int) (((double) img.getHeight(null)/img.getWidth(null)) * width); 
    this.img = img.getScaledInstance(width, height, Image.SCALE_SMOOTH); 
    } 

    public void paintComponent(Graphics g) { 
    g.drawImage(img, 0, 0, this); 
    } 
} 

alt text http://img691.imageshack.us/img691/2128/tempscreen.png

Répondre

1

Change:

public void setImage(String img) { 

Pour:

public void setImageName(String img) { 

Reconstruire et définissez la propriété ImageName dans le concepteur. Dans le code d'origine, le concepteur pense que la propriété bean Image est de type java.awt.Image, plutôt que String. Il ne sait pas comment spécifier une java.awt.Image au moment du design de votre bean. Cependant, il peut facilement passer des chaînes à votre bean, il vous suffit de lui donner une propriété bean String non ambiguë (ImageName).

+0

J'ai nettoyé et fait une reconstruction, mais l'objet ImagePanel la propriété ImageName n'est pas disponible pour la modification en mode Création. La valeur 'image' possède toujours le code personnalisé de la suggestion de l'autre type, et il existe une propriété 'name', définie sur null, mais pas de propriété ImageName. – Allen

0
new ImageIcon("/path/to/your/image.jpg").getImage(); 
+0

J'inclus les bibliothèques nécessaires, mais je reçois une erreur de temps d'exécution ... Exception dans le thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Largeur (0) et la hauteur (0) doit être non nul à java.awt.image.ReplicateScaleFilter. (ReplicateScaleFilter.java:85) at java.awt.image.AreaAveragingScaleFilter. (AreaAveragingScaleFilter.java:60) à java.awt.Image.getScaledInstance (Image.java:154) à Pokertable.ImagePanel.setImage (ImagePanel.java:17) – Allen

+0

this.img = img.getScaledInstance (largeur, hauteur , image.SCALE_SMOOTH) est la ligne de code appelée qui crée apparemment le problème. – Allen

+0

avez-vous tout importé? – Bozho

0

Une autre façon de le faire est d'utiliser la boîte à outils, mais bien sûr que vous faites une application, pas une applet, non?

URL url = new URL(this.getCodeBase(), "/path/to/image/here.gif"); 
temp = ImageIO.read(url); 

J'ai eu des problèmes avec les choses ImageIcon aussi.

+0

J'ai besoin de quelque chose à mettre dans le code personnalisé comme paramètre de l'appel à setImage, comme vous pouvez le voir dans l'image ci-dessus – Allen