ver varios usarse todos siguientes renombrar puede para otro mover los letras directorio cuál crear copiar contenido comandos comando archivos archivo java swing unix autocomplete jcombobox

java - varios - Aplicación de Windows con autocompletar usando la pestaña de archivos de máquina y directorios de Unix



ver el contenido de un archivo en linux (1)

En primer lugar, desea tener un campo de texto sin ciclos de enfoque y supresión de pestañas:

jTextField1.setFocusCycleRoot(true); jTextField1.setFocusTraversalKeysEnabled(false);

Luego, un modelo de datos para los archivos (aquí el directorio local, pero SSH también):

private File dir = new File("C:/Work"); private String typedPrefix = null; private List<String> filesWithPrefix = new ArrayList<>();

Luego, presionó una tecla para manejar la TAB:

  • Consumir el evento.
  • Obtenga el prefijo hasta el cursor para buscar nombres de archivos.
  • Si simplemente necesita restringir los nombres de archivos ya encontrados, haga lo mismo, de lo contrario, búsquelos físicamente.
  • Busque el prefijo común más largo en los nombres de archivo. Muestra eso.

    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); } } }

Lo que falta es la visualización de los nombres de archivo ambiguos. El menú emergente estaría bien, ¿no?

Surgir:

// 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);

Unix / Linux admite el autocompletado de archivos y directorios al presionar "tab". Necesito crear esta habilidad en mi aplicación de Windows. Tengo un campo de texto para que el usuario ingrese el nombre del archivo, y quiero responder a una "pestaña" presionar como lo hará cuando estamos en una consola de Unix:

  1. Si hay una opción: Autocompletar.
  2. Algunas opciones: muestra una lista de las opciones.
  3. Sin opciones - nada.

Para mi conexión SSH a mi máquina Unix, uso la API ch.ethz.ssh.

¿Hay una manera de hacerlo?