FileChooserBuilder не отображается в центре экрана

В настоящее время я пытаюсь использовать FileChooserBuilder из API платформы Netbeans. Следующий код представляет собой полное действие модуля netbeans. При запуске он отображается не в центре окна/экрана, а где-то в левом нижнем углу экрана. Есть ли возможность сделать так, чтобы это диалоговое окно отображалось посередине экрана?

public final class LoadProjectAction implements ActionListener {

    public void actionPerformed(ActionEvent e) {

        File home = new File(
            System.getProperty("user.home")
            + File.separator + "lib");

        FileChooserBuilder fileChooserBuilder = new FileChooserBuilder(
            LoadProjectAction.class);
        fileChooserBuilder.setTitle("Load project");
        fileChooserBuilder.setDefaultWorkingDirectory(home);
        fileChooserBuilder.setApproveText("Load");
        fileChooserBuilder.setDirectoriesOnly(true);


        File directory = fileChooserBuilder.showOpenDialog();

        if (directory != null) {
            return; // nothing to do
        }

        // do some processing here
    }

}

Спасибо за ваши идеи.


person Martin Vejmelka    schedule 08.04.2011    source источник


Ответы (1)


Нашел решение:

Вы должны получить экземпляр JFileChooser и установить правильный родительский компонент в его методе showOpenDialog (затем он позиционируется относительно главного окна приложения). Но поскольку NetBeans пытается работать с потоками достаточно безопасно — он разрешает доступ к компонентам только одному потоку, поэтому приходится использовать EventQueue.invokeLater.

public final class LoadProjectAction implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                // output window
                InputOutput io = IOProvider.getDefault().getIO("File search", true);
                io.select();

                // start in user home directory
                File initialDirectory = new File(
                    System.getProperty("user.home")
                    + File.separator + "lib");

                FileChooserBuilder fileChooserBuilder = new FileChooserBuilder(
                    "LoadProjectAction");
                fileChooserBuilder.setTitle("Load project");
                fileChooserBuilder.setDefaultWorkingDirectory(initialDirectory);
                fileChooserBuilder.setApproveText("Load");
                fileChooserBuilder.setDirectoriesOnly(true);

                JFileChooser jfc = fileChooserBuilder.createFileChooser();
                int value = jfc.showOpenDialog(WindowManager.getDefault().getMainWindow());

                if (value != JFileChooser.APPROVE_OPTION) {
                    return; // nothing to do
                }

                // process selection
            }
        });

    }
}
person Martin Vejmelka    schedule 08.04.2011