JFileChooser — по поводу кнопок открытия и отмены. Джава

У меня возникли проблемы с использованием JFileChooser. Всякий раз, когда я запускаю программу, если я сразу нажимаю кнопку «Отмена», не выбирая файл, она отображает «привет», и если я нажимаю «Открыть», она ничего не делает. С другой стороны, если я выберу файл и нажму кнопку «Открыть», он начнет отображать «Привет» (вызовите метод createFile) и отобразит «привет», если я нажму «Отмена».

Мой вопрос заключается в том, как я могу узнать, какая кнопка была нажата, и сделать что-то конкретное для каждого, например, вызвать функцию die при нажатии кнопки отмены и вызвать функцию createFile при нажатии кнопки open.

Я думал о чем-то вроде

if(e.getSource() == "Something_I_Dont_know") { do this}

Вот мой код:

import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class Grading{

public static void main(String[] arg){

 new MFrame();

}


}// end of class Grading

class MFrame extends JFrame{

private JCheckBox cum,uc,ucs;
private JButton calc, clear, exit;
private ButtonGroup bg;
private JTextArea display;
private JFileChooser input;

public MFrame(){

    setVisible( true );
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(550,550);

    input = new JFileChooser();
    add( input );
    input.addActionListener(
        new ActionListener(){
            public void actionPerformed( ActionEvent e ){
                //die();
                createFile();
            }
        }

    );

    setLayout( new FlowLayout() );

    pack();


}// end of constructor

public double gpa(){
 return 1.0;
}// end of gpa method

public void createFile(){
    System.out.println("Hello");
}

public void die(){
    System.exit(0);
}

}// конец класса MFRAME


person MaCo    schedule 10.06.2013    source источник


Ответы (2)


Используйте результат соответствующего метода showDialog, чтобы определить, какая кнопка была нажата.

JFileChooser input = new JFileChooser();
int result = input.showSaveDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
    createFile();
} else if (result == JFileChooser.CANCEL_OPTION) {
    System.out.println("Cancel was selected");
}

Примечание. При нажатии кнопки X в диалоговом окне JFileChooser также активируется окно CANCEL_OPTION.

Прочитайте Как использовать средства выбора файлов

person Reimeus    schedule 10.06.2013
comment
Благодарю вас! Это сработало! Но из любопытства, смог бы я выбрать маршрут ActionListener? Или я был вынужден пойти по пути APPROVE_OPTION? - person MaCo; 11.06.2013
comment
Избегайте этого маршрута. Хотя отмена зарегистрирована с помощью ActionListener средства выбора файла, кнопка открытия не работает, поэтому вообще не будет реагировать. Намерение становится более ясным при использовании возвращаемого результата, как показано выше. - person Reimeus; 11.06.2013

При инициализации компонентов:

fileChooser.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent evt) {
            fileChooserActionPerformed(evt);
        }
});

Приведенный выше прослушиватель действий вызывает следующий метод:

private void fileChooserActionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals(javax.swing.JFileChooser.APPROVE_SELECTION)) {
        System.out.println("approve selection");
    } else if (e.getActionCommand().equals(javax.swing.JFileChooser.CANCEL_SELECTION)) {
        System.out.println("cancel selection");
    }
}

ПРИМЕЧАНИЕ: файл/папка должны быть выбраны, чтобы утвердить выбор работал.

person Peet    schedule 22.03.2017