2013-05-13 4 views
1

base sur ce fil: Java: Load image from file, edit and add to JPanel J'ai essayé de charger une image na dans un JPanel mais ce n'est pas le peindre, alors voici l'affaire, comme suggéré, j'ai créé un nouveau fichier de classe nommé JImageComponent qui s'étend d'un JComponent, qui ressemble à ceci:Charger une image dans un JPanel dans une applet

package in.co.sneh; 
import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import javax.swing.JComponent; 
private BufferedImage img; 
    public class JImageComponent extends JComponent 
{ 
    public JImageComponent (BufferedImage bi) 
{ 
    img = bi; 
} 

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

puis dans la classe sous forme d'applet, lorsque je clique sur le bouton LoadPicture, l'action réalisée se présente comme suit:

JFileChooser chooser = new JFileChooser(); 
    chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 
    int retVal = chooser.showDialog(AppletForm.this, "Attach"); 
    if (retVal == JFileChooser.APPROVE_OPTION) { 
     picFile = chooser.getSelectedFile(); 
     try { 

      image = ImageIO.read(picFile); 
      JImageComponent jcomp = new JImageComponent(image); 
      Graphics2D g = image.createGraphics(); 
      jcomp.paintComponents(g); 
      // Draw here on the graphics 
      //g.dispose(); 
      g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
      RenderingHints.VALUE_ANTIALIAS_ON); 
      jPanel6.add(jcomp); 
      System.out.println("Testing" + picFile); 



     } catch (IOException e) { 

      e.printStackTrace(); 
     } 

me tout est en place mais l'image ne montre pas quand dans l'explorateur de fichiers choisir l'image, quelqu'un peut-il m'aider? Merci à l'avance, Romulo Romero

Répondre

3

Après avoir ajouté un nouveau composant au conteneur, vous devez appeler

jPanel6.revalidate(); 
jPanel6.repaint(); 

applets Aussi ne peut pas charger les ressources du système de fichiers local à moins qu'ils ne sont signés.

Note: tout en ayant un seul JImageComponent serait mieux, JLabel composants offrent déjà la fonctionnalité de commutation des images en utilisant setIcon.

+1

+1 pour JLabel et changer l'icône. – camickr

+0

Salut Reimeus tout d'abord, merci beaucoup de répondre et désolé pour le retard, et oui j'ai décidé de travailler avec l'étiquette et la définition d'une icône d'image, et ça fonctionne comme un charme: D merci encore pour répondre j'apprécie vraiment , tout fonctionne comme prévu maintenant: D !! Cordialement, Romulo Romero – Ogre3dUser

+0

Stupide redondance de "et" – Ogre3dUser

1

ici est le code simple applet u aide à modifier les images ....

you can try it 

/*Arpana*/ 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GridLayout; 
import java.awt.Image; 
import java.awt.MediaTracker; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.awt.image.BufferedImage; 
import java.awt.image.ConvolveOp; 
import java.awt.image.Kernel; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.border.TitledBorder; 

public class ConvolveApp extends JFrame { 
    CPanel displayPanel; 

    JButton sharpenButton, blurringButton, edButton, resetButton; 

    public ConvolveApp() { 
    super(); 
    Container container = getContentPane(); 

    displayPanel = new CPanel(); 
    container.add(displayPanel); 

    JPanel panel = new JPanel(); 
    panel.setLayout(new GridLayout(2, 2)); 
    panel 
     .setBorder(new TitledBorder(
      "Click a Button to Perform the Associated Operation and Reset...")); 

    sharpenButton = new JButton("Sharpen"); 
    sharpenButton.addActionListener(new ButtonListener()); 
    blurringButton = new JButton("Blur"); 
    blurringButton.addActionListener(new ButtonListener()); 
    edButton = new JButton("Edge Detect"); 
    edButton.addActionListener(new ButtonListener()); 
    resetButton = new JButton("Reset"); 
    resetButton.addActionListener(new ButtonListener()); 

    panel.add(sharpenButton); 
    panel.add(blurringButton); 
    panel.add(edButton); 
    panel.add(resetButton); 

    container.add(BorderLayout.SOUTH, panel); 

    addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent e) { 
     System.exit(0); 
     } 
    }); 
    //setSize(100,100); 
    setSize(displayPanel.getWidth()+50, displayPanel.getHeight()); 
    setVisible(true); 
    } 
    public static void main(String arg[]) { 
    new ConvolveApp(); 
    } 

    class ButtonListener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     JButton button = (JButton) e.getSource(); 

     if (button.equals(sharpenButton)) { 
     displayPanel.sharpen(); 
     displayPanel.repaint(); 
     } else if (button.equals(blurringButton)) { 
     displayPanel.blur(); 
     displayPanel.repaint(); 
     } else if (button.equals(edButton)) { 
     displayPanel.edgeDetect(); 
     displayPanel.repaint(); 
     } else if (button.equals(resetButton)) { 
     displayPanel.reset(); 
     displayPanel.repaint(); 
     } 
    } 
    } 
} 

class CPanel extends JLabel { 
    Image displayImage; 

    BufferedImage biSrc; 

    BufferedImage biDest; // Destination image is mandetory. 

    BufferedImage bi; // Only an additional reference. 

    Graphics2D big; 

    CPanel() { 
    setBackground(Color.black); 
    loadImage(); 
    setSize(displayImage.getWidth(this), displayImage.getWidth(this)); 
    createBufferedImages(); 
    bi = biSrc; 
    } 

    public void loadImage() { 
    displayImage = Toolkit.getDefaultToolkit().getImage("Desert.jpg"); 
    MediaTracker mt = new MediaTracker(this); 
    mt.addImage(displayImage, 1); 
    try { 
     mt.waitForAll(); 
    } catch (Exception e) { 
     System.out.println("Exception while loading."); 
    } 
    if (displayImage.getWidth(this) == -1) { 
     System.out.println("No jpg file"); 
     System.exit(0); 
    } 
    } 

    public void createBufferedImages() { 
    biSrc = new BufferedImage(displayImage.getWidth(this), displayImage 
     .getHeight(this), BufferedImage.TYPE_INT_RGB); 

    big = biSrc.createGraphics(); 
    big.drawImage(displayImage, 0, 0, this); 

    biDest = new BufferedImage(displayImage.getWidth(this), displayImage 
     .getHeight(this), BufferedImage.TYPE_INT_RGB); 
    } 

    public void sharpen() { 
    float data[] = { -1.0f, -1.0f, -1.0f, -1.0f, 9.0f, -1.0f, -1.0f, -1.0f, 
     -1.0f }; 
    Kernel kernel = new Kernel(3, 3, data); 
    ConvolveOp convolve = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, 
     null); 
    convolve.filter(biSrc, biDest); 
    bi = biDest; 
    } 

    public void blur() { 
    float data[] = { 0.0625f, 0.125f, 0.0625f, 0.125f, 0.25f, 0.125f, 
     0.0625f, 0.125f, 0.0625f }; 
    Kernel kernel = new Kernel(3, 3, data); 
    ConvolveOp convolve = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, 
     null); 
    convolve.filter(biSrc, biDest); 
    bi = biDest; 
    } 

    public void edgeDetect() { 
    float data[] = { 1.0f, 0.0f, -1.0f, 1.0f, 0.0f, -1.0f, 1.0f, 0.0f, 
     -1.0f }; 

    Kernel kernel = new Kernel(3, 3, data); 
    ConvolveOp convolve = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, 
     null); 
    convolve.filter(biSrc, biDest); 

    bi = biDest; 
    } 

    public void reset() { 
    big.setColor(Color.black); 
    big.clearRect(0, 0, bi.getWidth(this), bi.getHeight(this)); 
    big.drawImage(displayImage, 0, 0, this); 
    bi = biSrc; 
    } 

    public void update(Graphics g) { 
    g.clearRect(0, 0, getWidth(), getHeight()); 
    paintComponent(g); 
    } 

    public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2D = (Graphics2D) g; 

    g2D.drawImage(bi, 0, 0, this); 
    } 
} 
Questions connexes