2013-05-13 98 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); 
    } 
}