Диалоговое окно "Открыть файл..." не закрывается

Привет, я новичок в языке Java. Я использовал Eclipse в качестве инструмента разработки. У меня есть код, чтобы открыть диалоговое окно файла, и он сделал, но у меня есть две проблемы:

  1. Когда я выбираю файл и нажимаю кнопку "Открыть" в диалоговом окне, диалоговое окно появляется снова, а не закрывается.
  2. Иногда текст в текстовом поле имени файла в диалоге неясен и / или текст на кнопке исчезает. Если я увеличу диалоговое окно, текст будет отображаться полностью.

Вот мой код:

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 ответа

Решение

Ваше диалоговое окно появляется снова, потому что вы вызываете метод 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
}

Ты звонишь fileChooser.showOpenDialog(this) несколько раз, и именно поэтому ваша программа ведет себя так, как она себя ведет. Вместо вызова fileChooser.showOpenDialog(this) один раз и сохраните его значение в переменной.

На самом деле, вам даже не нужен этот пустой блок:

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

Так что избавься от этого!

Другие вопросы по тегам