
Unix / linux支持当按下“tab”时自动完成文件和目录。 我需要在我的windows应用程序中创build这个function。 我有一个用户input文件名的文本字段,我想要响应一个“标签”按就好了,当我们在一个Unix控制台:
如果有一个选项 – 自动完成。
一些选项 – 显示选项列表。
没有select – 纳达。
对于我的SSH连接到我的Unix机器,我使用ch.ethz.ssh API。
有没有办法做到这一点?
Git别名 – 命令行自动完成分支名称
自定义zsh自动完成
Pyreadline在windows上的任意自动完成
Bash Tab完成文件名后参数
如何在单独的进程中运行一个shell并获得自动完成? (python)
java linuxterminal-cp自动完成
git:哈希自动完成
如何覆盖现有的zsh键盘完成?
YouCompleteMe无法自动完成
autohotkey中的多个游标
首先你想有一个没有焦点循环的文本字段,并且制表符被禁止:
jTextFIEld1.setFocusCycleRoot(true); jTextFIEld1.setFocusTraversalKeysEnabled(false);
然后一个数据模型的文件(这里是本地目录,但SSH也是这样):
private file dir = new file("C:/Work"); private String typedPrefix = null; private List<String> filesWithPrefix = new ArrayList<>();
然后按TAB一键处理:
消耗事件。
获取前缀到搜索文件名的插入符号。
如果你只需要限制已经找到的文件名,那么做,否则物理搜索它们。
在文件名中查找最长的通用前缀。 显示那个。
private voID jTextFIEld1Keypressed(java.awt.event.KeyEvent evt) { System.out.println("Keypressed " + evt); if (evt.getKeyCode() == KeyEvent.VK_TAB) { evt.consume(); int caretPos = jTextFIEld1.getcaretposition(); try { final String newPrefix = jTextFIEld1.getText(0,caretPos); System.out.println("newPrefix: " + newPrefix); if (!newPrefix.isEmpty()) { if (typedPrefix == null || !newPrefix.startsWith(typedPrefix)) { // Must physically reload possible values: String[] filenames = dir.List(new filenameFilter() { @OverrIDe public boolean accept(file dir,String name) { return name.startsWith(newPrefix); } }); filesWithPrefix.clear(); Collections.addAll(filesWithPrefix,filenames); typedPrefix = newPrefix; } else { // Can reduce prior selection: for (ListIterator<String> it = filesWithPrefix.ListIterator(); it.hasNext(); ) { String filename = it.next(); if (!filename.startsWith(newPrefix)) { it.remove(); } } typedPrefix = newPrefix; } System.out.println("filesWithPrefix: " +filesWithPrefix); if (!filesWithPrefix.isEmpty()) { // Find longest common prefix: String longestCommonPrefix = null; for (String filename : filesWithPrefix) { if (longestCommonPrefix == null) { longestCommonPrefix = filename; } else { while (!filename.startsWith(longestCommonPrefix)) { longestCommonPrefix = longestCommonPrefix.substring(0,longestCommonPrefix.length() - 1); } } } if (longestCommonPrefix.length() > typedPrefix.length()) { jTextFIEld1.setText(longestCommonPrefix); jTextFIEld1.setCaretposition(longestCommonPrefix.length()); typedPrefix = longestCommonPrefix; } if (filesWithPrefix.size() > 1) { // Show popup: ;;; } else if (filesWithPrefix.size() == 1) { // file selected: System.beep(); } } } } catch (BadLocationException ex) { Logger.getLogger(TabsJFrame.class.getname()).log(Level.SEVERE,null,ex); } } }
缺少的是显示不明确的文件名称。 d出菜单会很好,不是吗?
d出:
// Show popup: jpopupmenu popup = new jpopupmenu(); for (String filename : filesWithPrefix) { popup.add(new AbstractAction(filename) { @OverrIDe public voID actionPerformed(ActionEvent e) { jTextFIEld1.setText(e.getActionCommand()); } }); } Point pt = jTextFIEld1.getCaret().getMagicCaretposition(); popup.show(jTextFIEld1,pt.x,pt.y + 5);
总结以上是内存溢出为你收集整理的Windows应用程序与自动完成使用UNIX机器文件和目录的选项卡全部内容,希望文章能够帮你解决Windows应用程序与自动完成使用UNIX机器文件和目录的选项卡所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)