【问题标题】:Load an image into a JPanel in an applet将图像加载到小程序中的 JPanel
【发布时间】:2013-05-07 22:04:31
【问题描述】:

基于此线程:Java: Load image from file, edit and add to JPanel 我试图将 na 图像加载到 JPanel 但它没有绘制它,所以这是交易,正如建议的那样,我创建了一个名为 JImageComponent 的新类文件,它从 JComponent 扩展,如下所示:

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

然后在小程序表单类中,当我点击 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();
        }

对我来说一切都准备好了,但是在文件资源管理器中选择图像时图像没有显示,有人可以帮我吗? 提前致谢, 罗慕洛·罗梅罗

【问题讨论】:

    标签: java image swing paintcomponent jfilechooser


    【解决方案1】:

    向容器中添加新组件后,需要调用

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

    Applet 也无法从本地文件系统加载资源,除非它们被签名

    注意: 虽然有一个JImageComponent 会更好,但JLabel 组件已经提供了使用setIcon 切换图像的功能。

    【讨论】:

    • 嗨,Reimeus 首先,非常感谢您的回复,很抱歉耽搁了,是的,我决定使用标签并设置图像图标,它就像一个魅力:D 再次感谢回复我真的很感激,现在一切都按预期运行:D!亲切的问候,罗慕洛·罗梅罗
    • “和”的愚蠢冗余
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 2012-07-12
      • 2013-07-26
      • 1970-01-01
      相关资源
      最近更新 更多