Comment puis-je afficher une image dans un Composite
Ma question ici est de savoir comment puis-je afficher une image dans un Composite? D'autres sujets ici pour demander quelque chose de similaire ne sont pas clair pour mon sujet de comment je peux faire cela.
J'ai un répertoire dans mon dossier de projet qui ont des fichiers d'image Project Folder/GUI/img
, spécifiquement gray.png
et green.png
qui je veux afficher dans un Composite.
J'ai essayé avec le code suivant à l'aide de ImageIcon
et JLabel
que j'ai trouvé dans d'autres post:
ImageIcon image = new ImageIcon("GUI/img/gray.png");
JLabel label = new JLabel(image);
//JPanel panel is already initialized by the IDE
panel.add(label)
Mais ne fonctionne pas... Le JPanel
rester vide, sans afficher la moindre image. Comment puis-je le faire?
Supplémentaire à cette, je veux que l'image à l'intérieur de la JPanel
changement (gray.png
pour green.png
) lorsqu'une action est effectuée, par exemple en appuyant sur un bouton. Je peux archive que par la même méthode pour afficher l'image dans l' JPanel
droit?
Merci d'avance!
EDIT: Voici un exemple de code de test pour obtenir ce. L'initialisation est effectuée automatiquement par l'IDE.
import java.awt.Image;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class Sample extends javax.swing.JFrame {
public Sample() {
initComponents();
}
//Initialization
private void initComponents() {
PanelImage = new javax.swing.JPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
});
javax.swing.GroupLayout PanelImageLayout = new javax.swing.GroupLayout(PanelImage);
PanelImage.setLayout(PanelImageLayout);
PanelImageLayout.setHorizontalGroup(
PanelImageLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE)
);
PanelImageLayout.setVerticalGroup(
PanelImageLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE)
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(61, 61, 61)
.addComponent(PanelImage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(239, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(45, 45, 45)
.addComponent(PanelImage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(155, Short.MAX_VALUE))
);
pack();
}
private void formWindowOpened(java.awt.event.WindowEvent evt) {
try {
DisplayImage(PanelImage, "/GUI/img/gray.png");
} catch (Exception ex) {
Logger.getLogger(Sample.class.getName()).log(Level.SEVERE, null, ex);
}
}
//For display the url image in a JPanel
private void DisplayImage(JPanel jp, String url) throws IOException, Exception {
try {
Image image=ImageIO.read(this.getClass().getResource(url));
ImageIcon imageicon=new ImageIcon(image);
JLabel label=new JLabel(imageicon);
jp.add(label);
} catch (IOException ex) {
throw new IOException();
} catch (Exception ex) {
throw new Exception();
}
}
public static void main(String args[]) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Sample.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Sample().setVisible(true);
}
});
}
//Variables declaration
private javax.swing.JPanel PanelImage;
}
La private void DisplayImage(JPanel jp, String url)
est ce que j'ai besoin de travailler pour afficher l'image, à partir de l'url String url
dans le JPanel jp
Essayez d'utiliser
ImageIO.read(new File("GUI/img/gray.png"))
, cela va lever une exception si l'image ne peut pas être chargé pour une raison quelconque, qui ImageIcon
ne sera pas. Voir Lecture/Chargement d'une Image pour plus de détailsdans les exemples impliquant des images, je tiens à ajouter les conseils suivants - Une manière d'obtenir de l'image(s) pour un exemple de lien pour les images vues dans ce Q&A.
Regarde comme l'ajout de la composante problème (pas de nouvelle disposition a été déclenché). Essayez de le revalider et repeindre votre panneau (
panel.revalidate();
et panel.repaint();
) après l'ajout de votre logo au panneau.essayé les deux méthodes
panel.revalidate()
et panel.repaint()
avec aucun effet. Le panneau ne fonctionne toujours pas afficher l'image.
OriginalL'auteur FiroKun | 2016-04-04
Vous devez vous connecter pour publier un commentaire.
La recherche de morceaux de code dans Google j'ai fini avec une solution... Et applique le même modèle que les précédents commentaires voir.
Le code que m'a donné la solution était:
label.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/gray.png")))
Avec ça, puis j'ai fait la méthode que j'ai voulu mettre en œuvre:
Peut-être que ce n'est pas le parfait et le plus-solution correcte, mais fonctionne parfaitement pour moi, c'est ce que je veux.
Merci à tous pour les réponses et suggestions!
OriginalL'auteur FiroKun
J'ai eu un problème similaire quand j'ai travaillé sur la création de dragueur de mines. J'ai fini par trouver une solution et la faire fonctionner en chargeant d'abord une Image, puis de la création d'une ImageIcon à partir de cette Image.
L'Application de ses ressources ressources incorporées par le temps de déploiement, de sorte qu'il est sage de commencer à y accéder comme s'ils l'étaient, dès maintenant. Un embedded-ressource doit être accessible par l'URL plutôt que de fichier. Voir le l'info. page de ressource incorporée pour savoir comment la forme de l'URL. Au-dessus (comme on le voit dans cette réponse) est un exemple de chargement d'une image par son URL. (si ..beau travail sur cette partie @22ninjas).
J'ai essayé ce code mais sans aucun effet. J'ai créer un
Image
objet deImageIO
et puis la passer à unImageIcon
, dernier pour uneJLabel
et ajouté leJLabel
à laJPanel
et de rien, l'image ne s'affiche pas dans le panneau. Peut-être que je suis en train de faire une erreur dans le processus, mais la mise en œuvre de cette manière ne fonctionne pas pour moi.OriginalL'auteur scoots
vous devez utiliser ImageIcon(ce.getClass().getResource("/Gui/img/gris.png"));
ici est un exemple de son travail.
ExImage
est une classe java que j'ai besoin de créer avec ce code, et de la principaleJFrame
, qui a l'interface principale, appelez leExImage
constructeur pour représenter l'image à partir de l'url à l'intérieur d'unJPanel
contenue à l'intérieur de laJFrame
?OriginalL'auteur shimbu shambu