Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing从文件选择器加载图像时未显示_Java_Swing - Fatal编程技术网

Java Swing从文件选择器加载图像时未显示

Java Swing从文件选择器加载图像时未显示,java,swing,Java,Swing,这是一个课堂作业。我应该加载一个文件并在Swing应用程序上显示它 我按照笔记中的流程进行操作,但它们很模糊,我还使用了其他stackoverflow帖子,但我无法让它发挥作用。加载图像时,程序不会崩溃,但不会显示任何内容 -加载图像后是否必须重新绘制或刷新文件?我试过了,但没用。我做错了什么?重新绘制方法被注释 import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.event.ActionEvent; imp

这是一个课堂作业。我应该加载一个文件并在Swing应用程序上显示它

我按照笔记中的流程进行操作,但它们很模糊,我还使用了其他stackoverflow帖子,但我无法让它发挥作用。加载图像时,程序不会崩溃,但不会显示任何内容

-加载图像后是否必须重新绘制或刷新文件?我试过了,但没用。我做错了什么?重新绘制方法被注释

import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Part1 {

    public static File selectedFile;

      public static void main(String[] args) {
        JFrame frame = buildFrame();
        JButton button = new JButton("Select File");
        frame.add(button);

        button.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent ae) 
            {
                JFileChooser fileChooser = new JFileChooser();
                int returnValue = fileChooser.showOpenDialog(null);
                if (returnValue == JFileChooser.APPROVE_OPTION) 
                {
                    selectedFile = fileChooser.getSelectedFile();
                    CardImagePanel image = new CardImagePanel(selectedFile);
                    frame.add(image);
//                  frame.repaint();
                }
            }
        });
      }

      private static JFrame buildFrame() 
      {
            JFrame frame = new JFrame();
            frame.setSize(1000,1000);
            frame.setLayout(new FlowLayout());
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
            return frame;
      }
}

class CardImagePanel extends JPanel {
    private BufferedImage image;

    public CardImagePanel(File newImageFile)
    {
    try {
        image = ImageIO.read(newImageFile);
    } catch (IOException e){
        e.printStackTrace();}
    }

    public void paintComponent(Graphics g) {
      super.paintComponent(g);
      g.drawImage(image, 0, 0, 500, 500, this);
    }
}

如前所述,您需要调用
frame.revalidate()添加新组件后


您还应该调用
image.setPreferredSize(新维度(500500))或类似代码,以确保您的图像不太小。

您可以使用JLabel,让您的生活更简单。Yu应该删除以前添加到框架中的内容,在添加新面板后,您需要调用重新验证并重新绘制,而我最好覆盖面板的getPreferredSize;)