AWT FileDialog имя файла копировать / вставлять нажатия клавиш? - PullRequest
0 голосов
/ 15 ноября 2018

Я обычно не пишу Java-приложения с графическим интерфейсом, но мне нужна была простая утилита, и мне удалось написать ее, используя Swing и AWT. Утилита должна открывать и сохранять файлы, и она в основном используется на Macos. Apple рекомендует , используя AWT FileDialog вместо средства выбора файлов Swing, поскольку FileDialog больше похож на диалоговое окно с собственным файлом Macos. Вот что я сделал.

Готовая утилита работает нормально, за исключением одной вещи, которую я не смог решить. Диалог для сохранения файла включает в себя текстовое поле для ввода имени файла. Если щелкнуть правой кнопкой мыши текстовое поле, откроется меню с параметрами копирования и вставки. Но соответствующие нажатия клавиш (Cmd-C, Cmd-V) ничего не делают.

Следующая программа демонстрирует проблему:

import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Scratch extends JPanel implements ActionListener {
    private static final long serialVersionUID = 1L;
    JButton saveButton;
    FileDialog fd;

    public Scratch(Frame aFrame) {
        super(new BorderLayout());
        fd = new FileDialog(aFrame, "Save", FileDialog.SAVE);
        saveButton = new JButton("Save a File...");
        saveButton.addActionListener(this);
        this.add(saveButton);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == saveButton) {
            fd.setVisible(true);
            String file = fd.getFile();
            System.out.println(file);
        }
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("Scratch");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new Scratch(frame));
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

При запуске он открывает окно с кнопкой сохранения. При нажатии на кнопку открывается FileDialog с полем «Сохранить как». Вы можете ввести в поле, и вы можете щелкнуть правой кнопкой мыши на поле и выбрать «копировать» или «вставить» из всплывающего меню. Но вы не можете использовать Cmd-V для вставки в поле - кажется, нет никаких нажатий клавиш, связанных с действиями копирования или вставки.

Есть ли простой способ привязать нажатия клавиш к окну имени файла внутри FileDialog?

1 Ответ

0 голосов
/ 27 июня 2019

AWT FileDialog (по крайней мере, под Java 8 на MacOS) в итоге вызывает CFileDialog.nativeRunFileDialog () для отображения реального диалога.Параметры, передаваемые этому методу, по-видимому, не включают ничего, что можно было бы использовать для присоединения нажатий клавиш к полю имени файла диалога сохранения.

Мой вывод заключается в том, что нет разумного способа изменить FileDialog для добавления нажатий клавиш всохранить вариант.Я вернулся к Swing JFileChooser в приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...