Ajouter une image à JFrame


J'utilise donc Eclipse avec Windows builder. Je me demandais juste s'il y avait de toute façon je peux importer une image qui apparaîtra sur le JFrame que je peux facilement déplacer et redimensionner au lieu de définir l'emplacement et la taille et de le dessiner.

Author: mKorbel, 2013-08-02

4 answers

Il n'y a pas de composant d'image spécialisé fourni dans Swing (ce qui est triste à mon avis). Donc, il y a quelques options:

  1. Comme @Reimeus l'a dit: Utilisez un JLabel avec une icône.
  2. Créez dans le générateur de fenêtre un JPanel, qui représentera l'emplacement de l'image. Ajoutez ensuite votre propre composant d'image personnalisé au JPanel en utilisant quelques lignes de code que vous n'aurez jamais à modifier. Ils devraient ressembler à ceci:

    JImageComponent ic = new JImageComponent(myImageGoesHere);
    imagePanel.add(ic);
    

    Où JImageComponent est une classe auto-créée qui étend JComponent qui remplace la méthode paintComponent() pour dessiner l'image.

 17
Author: Martijn Courteaux, 2013-08-03 00:09:11

Voici un exemple simple d'ajouter une image à un JFrame:

frame.add(new JLabel(new ImageIcon("Path/To/Your/Image.png")));
 27
Author: Rollyng, 2014-08-26 00:53:55

Si vous utilisez Netbeans pour développer, utilisez jLabel et modifiez sa propriété icon.

 4
Author: rishad2m8, 2014-01-22 14:06:23

Comme l'a dit martijn-courteaux, créer un composant personnalisé est la meilleure option. En C# existe un composant appelé PictureBox {[3] } et j'ai essayé de créer ce composant pour Java, voici le code:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;

public class JPictureBox extends JComponent {

    private Icon icon = null;
    private final Dimension dimension = new Dimension(100, 100);
    private Image image = null;
    private ImageIcon ii = null;
    private SizeMode sizeMode = SizeMode.STRETCH;
    private int newHeight, newWidth, originalHeight, originalWidth;

    public JPictureBox() {
        JPictureBox.this.setPreferredSize(dimension);
        JPictureBox.this.setOpaque(false);
        JPictureBox.this.setSizeMode(SizeMode.STRETCH);
    }

    @Override
    public void paintComponent(Graphics g) {
        if (ii != null) {
            switch (getSizeMode()) {
                case NORMAL:
                    g.drawImage(image, 0, 0, ii.getIconWidth(), ii.getIconHeight(), null);
                    break;
                case ZOOM:
                    aspectRatio();
                    g.drawImage(image, 0, 0, newWidth, newHeight, null);
                    break;
                case STRETCH:
                    g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
                    break;
                case CENTER:
                    g.drawImage(image, (int) (this.getWidth() / 2) - (int) (ii.getIconWidth() / 2), (int) (this.getHeight() / 2) - (int) (ii.getIconHeight() / 2), ii.getIconWidth(), ii.getIconHeight(), null);
                    break;
                default:
                    g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
            }
        }
    }

    public Icon getIcon() {
        return icon;
    }

    public void setIcon(Icon icon) {
        this.icon = icon;
        ii = (ImageIcon) icon;
        image = ii.getImage();
        originalHeight = ii.getIconHeight();
        originalWidth = ii.getIconWidth();
    }

    public SizeMode getSizeMode() {
        return sizeMode;
    }

    public void setSizeMode(SizeMode sizeMode) {
        this.sizeMode = sizeMode;
    }

    public enum SizeMode {
        NORMAL,
        STRETCH,
        CENTER,
        ZOOM
    }

    private void aspectRatio() {
        if (ii != null) {
            newHeight = this.getHeight();
            newWidth = (originalWidth * newHeight) / originalHeight;
        }
    }

}

Si vous souhaitez ajouter une image, choisissez la JPictureBox, après cela, allez dans Propriétés et trouvez la propriété "icon" et sélectionnez une image. Si vous souhaitez modifier la propriété sizeMode, choisissez la JPictureBox, après cela, allez dans Propriétés et trouvez la propriété "sizeMode" , vous pouvez en choisir valeurs:

  • Valeur NORMALE, l'image est positionnée dans le coin supérieur gauche de la JPictureBox.
  • La valeur d'ÉTIREMENT provoque l'étirement ou le rétrécissement de l'image pour s'adapter à la JPictureBox.
  • La valeur de ZOOM provoque l'étirement ou le rétrécissement de l'image pour s'adapter à la JPictureBox; cependant, le rapport d'aspect de l'original est maintenu.
  • La valeur du CENTRE entraîne le centrage de l'image dans la zone client.

Si vous voulez en savoir plus sur ce sujet, vous pouvez consulter ce vidéo.

Vous pouvez voir le code de Gitlab ou Github.

 2
Author: ricardo130, 2018-08-03 00:17:49