Windows应用程序与自动完成使用UNIX机器文件和目录的选项卡

Windows应用程序与自动完成使用UNIX机器文件和目录的选项卡,第1张

概述Windows应用程序与自动完成使用UNIX机器文件和目录的选项卡

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机器文件和目录的选项卡所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1211353.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-04
下一篇2022-06-04

发表评论

登录后才能评论

评论列表(0条)

    保存