我怎么能不先显示打开的对话框?

How can I not show the open dialog first?

嗯,我遇到的唯一问题是首先显示打开的对话框。我想要的是只将它放在 JFrame 内,然后在 JFrame 内做其余的事情,比如打开图像并显示它。 It should be like this

问题是我的 JFileChooser 先显示了。而且我希望所有内容都在 JFrame 中,就像显示的图像中一样。

这是我的代码:

import java.awt.Image;
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.border.*;

import java.awt.Color;
import java.awt.Dimension;


public class imgviewer extends JFrame{
    
    JButton button;
    JLabel label;
    
    public imgviewer() {
        super("Image viewer");
        label = new JLabel();
        label.setBounds(400, 10, 180, 300);
        Border b = BorderFactory.createLineBorder(Color.ORANGE, 2);
        JFileChooser file = new JFileChooser(".");
        label.setBorder(b);
        add(label);
        file.setPreferredSize(new Dimension(400, 300));
        
        file.setCurrentDirectory(new File(System.getProperty("user.home")));
        FileNameExtensionFilter filter = new FileNameExtensionFilter("*.Images", "jpg", "png", "gif");
        file.addChoosableFileFilter(filter);
            int result = file.showOpenDialog(null);
            if (result == JFileChooser.APPROVE_OPTION) {
                File selectedFile = file.getSelectedFile();
                String path = selectedFile.getAbsolutePath();
                label.setIcon(ResizeImage(path));
            }
                
            else if (result == JFileChooser.CANCEL_OPTION) {
                System.out.println("No File Selected");
            }
        
        add(file);
        setLayout(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setSize(600, 350);
        setVisible(true);
    }
    
     public ImageIcon ResizeImage(String ImagePath) {
         ImageIcon MyImage = new ImageIcon(ImagePath);
         Image img = MyImage.getImage();
         Image newImg = img.getScaledInstance(label.getWidth(), label.getHeight(), Image.SCALE_SMOOTH);
         ImageIcon image = new ImageIcon(newImg);
         return image;
     }
    
    public static void main(String[] args) {
        new imgviewer();
    }
}

我不确定如何做你想做的事,但是你把行 int result = file.showOpenDialog(null); 放到你的代码中,那一行明确表示“现在在它自己的文件对话框中打开这个 JFileChooser ”。按照您的代码顺序,这显然发生在 setVisible(true) 行之前,该行将打开您希望放置在文件对话框周围的包装器。

file.addChoosableFileFilter(filter); 之后和 add(file) 之前的代码缩进是否有原因?如果您认为此代码位于一个单独的块中,这将阻止它在以后执行,但事实并非如此。

我已经很长时间没有使用 JFileChooser 或一般的 Swing,所以我不知道如果将 JFileChooser 视为单独的组件嵌入到另一个组件中,但如果这完全有效,你绝对不能使用 JFileChoosershowOpenDialog 方法。