2013-05-13 95 views
1

基于以下主题:Java: Load image from file, edit and add to JPanel 我试图将na图像加载到JPanel中,但它没有绘制它,所以这里的交易,建议我创建了一个新的类文件JImageComponent从一个JComponent延伸,它看起来像这样:将一个图像加载到一个小程序中的JPanel

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); 
} 
} 

然后在applet窗体类,当我在的LoadPicture按钮点击,所执行的操作如下所示:

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(); 
     } 

我一切都在原地,但形象没有显示在文件资源管理器中选择图像时,任何人都可以帮我吗? 由于提前, 罗慕洛·罗梅罗

回答

3

添加新的组件到容器后,你需要调用

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

而且小应用程序无法从本地文件系统中加载资源,除非他们是签署

注: 虽然有一个单一的JImageComponent会更好,JLabel组件已经提供的使用setIcon画面切换功能。

+1

+1 JLabel的和不断变化的图标。 – camickr 2013-05-13 19:22:41

+0

嗨Reimeus首先, 非常感谢回复和抱歉的延迟,是的,我决定使用标签和设置图像图标,它的作品像一个魅力:D 再次感谢回复我真的很感激它,现在一切都按预期运行:D! 亲切的问候, Romulo罗梅罗 – Ogre3dUser 2013-05-15 17:48:00

+0

“和”的愚蠢冗余, – Ogre3dUser 2013-05-15 17:54:02

1

这里是一个简单的小程序代码,可以帮助u到编辑图像....

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); 
    } 
}