JFileChooser类型中的方法showSaveDialog(Component)不适用于()

Ann*_*lee 0 java swing

我想使用saveDialog初始化一个帧,但是当使用它时chooser.showSaveDialog(this);我得到一个错误:

public void initialize() {

    JFrame frame = new JFrame();
    Container content = frame.getContentPane();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Menu
    JMenu menu = new JMenu("File");
    menu.add(new AbstractAction("Make Image") {
        public void actionPerformed(ActionEvent e) {
            JFileChooser chooser  = new JFileChooser();
            int option = chooser.showSaveDialog(this);
            if(option == JFileChooser.APPROVE_OPTION) {
                File file = chooser.getSelectedFile();
                writeJPEGImage(file);
            }
        }});

    JPopupMenu.setDefaultLightWeightPopupEnabled(false);
    JMenuBar menuBar = new JMenuBar();
    menuBar.add(menu);
    frame.setJMenuBar(menuBar);


    content.add(tree);
    frame.pack();
    frame.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)

错误:

JFileChooser类型中的方法showSaveDialog(Component)不适用于参数()

我知道这个方法通常会得到一个Component,但是我的类中没有,因为我在这个方法中加载它.

任何建议如何解决?

我感谢你的回答!

PS.: new Test()确实有效,但我必须给它当前的组件!

小智 5

您可以使用已创建的帧变量作为参数或内容变量.

int option = chooser.showSaveDialog(frame);
Run Code Online (Sandbox Code Playgroud)

要么

int option = chooser.showSaveDialog(content);
Run Code Online (Sandbox Code Playgroud)

此外,您必须将它们定义为final,以便能够从您的匿名类访问它们:

final JFrame frame = new JFrame();
Run Code Online (Sandbox Code Playgroud)

要么

final Container content = frame.getContentPane();
Run Code Online (Sandbox Code Playgroud)