“打开文件...”对话框不会关闭

时间:2014-03-17 23:30:53

标签: java dialog jfilechooser

嗨,我是Java语言的新手。我使用Eclipse作为我的开发工具。我有代码打开文件对话框,但它有两个问题:

  1. 当我选择文件并单击对话框中的“打开”按钮时,会再次出现对话框而不是关闭。
  2. 有时,对话框中文件名文本框中的文字不清晰和/或按钮上的文字消失。如果我放大对话框,文本将完全显示。
  3. 这是我的代码:

    package PDFAnnotationPackage;
    
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.SwingUtilities;
    import javax.swing.filechooser.*;
    import java.io.*;
    
    public class MainForm extends JFrame implements ActionListener  {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new MainForm();
    }
    
    public MainForm(){
        super("Example");
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    
        // Name the JMenu & Add Items
        JMenu menu = new JMenu("File");
        menu.add(makeMenuItem("Open"));
        menu.add(makeMenuItem("Save"));
        menu.add(makeMenuItem("Quit"));
    
        // Add JMenu bar
        JMenuBar menuBar = new JMenuBar();
        menuBar.add(menu);
        setJMenuBar(menuBar);
        setSize(300, 300);
        setLocation(200, 200);
        setVisible(true);
    }
    
    public void actionPerformed(ActionEvent e) {
    
        // Menu item actions
        String command = e.getActionCommand();
    
        if (command.equals("Quit")) {
            System.exit(0);
        } else if (command.equals("Open")) {
            // Open menu item action
            JFileChooser fileChooser = new JFileChooser();           
            if (fileChooser.showOpenDialog(MainForm.this) == JFileChooser.APPROVE_OPTION) {
              File file = fileChooser.getSelectedFile();
              System.out.println("Open menu item clicked");
              // load from file
            }
            if (fileChooser.showOpenDialog(this) == JFileChooser.CANCEL_OPTION ) {
    
                }
    
    
            } else if (command.equals("Save")) {
            // Save menu item action
            System.out.println("Save menu item clicked");
            }
        }
    
        private JMenuItem makeMenuItem(String name) {
            JMenuItem m = new JMenuItem(name);
            m.addActionListener(this);
            return m;
        }
    }
    

    我该如何解决这些问题?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您多次调用fileChooser.showOpenDialog(this),这就是您的程序行为正常的原因。而是调用fileChooser.showOpenDialog(this)一次,并将其值保存到变量。

事实上,你甚至不需要这个空块:

if (fileChooser.showOpenDialog(this) == 
    JFileChooser.CANCEL_OPTION ) {
}

所以摆脱它!

答案 1 :(得分:1)

您的对话框再次出现,因为您正在调用方法showOpenDialog两次。试试这个

if (command.equals("Quit")) {
    // Close application
} else if (command.equals("Open")) {
    JFileChooser fileChooser = new JFileChooser(); 
    int returnVal = fileChooser.showOpenDialog(parent);

    if (returnVal ==  FileChooser.APPROVE_OPTION) {
        File file = fileChooser.getSelectedFile();
        // Load file
    } else if (returnVal == JFileChooser.CANCEL_OPTION ) {
        // Do something else
    } 
} else if (command.equals("Save")) {
    // Save menu item action
}