Я обычно не пишу 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
?